日期:2014-05-17 浏览次数:20931 次
create table t1
(日期 date, 姓名 varchar(8),
工号 int, 类别 varchar(8))
insert into t1
select '2012/8/2', '张三', 1, '事假' union all
select '2012/8/4', '张三', 1, '病假' union all
select '2012/8/4', '李四', 2, '公假'
create table t2
(日期 date, 姓名 varchar(8),
工号 int, 工时 varchar(8))
insert into t2
select '2012/8/1', '李四', 2, '8' union all
select '2012/8/2', '李四', 2, '3.2' union all
select '2012/8/3', '李四', 2, '2' union all
select '2012/8/1', '张三', 1, '8' union all
select '2012/8/3', '张三', 1, '5'
declare @sql varchar(6000)='select 姓名,工号,'
select @sql=@sql+'['+rtrim(t.d)+'] '''+rtrim(t.d)+'号'','
from (select distinct datepart(dd,日期) 'd' from t2
union
select distinct datepart(dd,日期) 'd' from t1) t
select @sql=left(@sql,len(@sql)-1)+
' from
(select 姓名,工号,datepart(dd,日期) ''日期'',类别 ''r'' from t1
union all
select 姓名,工号,datepart(dd,日期) ''日期'',工时 ''r'' from t2) a
pivot(max(r) for 日期 in ('
select @sql=@sql+'['+rtrim(t.d)+'],'
from (select distinct datepart(dd,日期) 'd' from t2
union
select distinct datepart(dd,日期) 'd' from t1) t
select @sql=left(@sql,len(@sql)-1)+')) p'
exec(@sql)
/*
姓名 工号 1号 2号 3号 4号
-------- ----------- -------- -------- -------- --------
张三 1 8 事假 5 病假
李四 2 8 3.2 2 公假
(2 row(s) affected)
*/
------解决方案--------------------
这是设计问题,而非三两个SQL语句问题