日期:2014-05-17 浏览次数:20779 次
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语句问题