行列转换后,如何加上求和列?????
exec(N'select a.*,b.天数 from(select [name]'+@s+N' from #T where [workday] between '''+@dt3+''' and '''+@dt1+''' group by [name])a inner join (select [name],count(*)as 天数 from #T where [status]=''上班'' group by [name])b on a.name=b.name')
[解决办法]
本帖最后由 josy 于 2012-12-11 21:22:05 编辑
declare @dt1 datetime,@dt2 datetime,@dt3 datetime
set @dt1='2011-11-25'
set @dt2=dateadd(m,-1,@dt1)+1
set @dt3=@dt2
declare @s nvarchar(4000)
set @s=''
while @dt1>=@dt2
Select @s=@s
+N','+quotename(rtrim(Day(@dt2))+'号')
+N'=max(case when Day([workday])=N'+quotename(Day(@dt2),'''')+N' then [status] end)',
@dt2=@dt2+1
exec(N'select [name]'+@s+N',SUM(CASE WHEN status=''上班'' THEN 1 ELSE 0 END) AS [总上班天数] from #T where [workday] between '''+@dt3+''' and '''+@dt1+''' group by [name]')
--运行结果
name 26号 27号 28号 29号 30号 31号 1号 2号 3号 4号 5号 6号 7号 8号 9号 10号 11号 12号 13号 14号 15号 16号 17号 18号 19号 20号 21号 22号 23号 24号 25号 总上班天数
---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -----------
李四 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 上班 请假 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1
王五 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 上班 上班 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 2
张三 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 上班 上班 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 2
(3 行受影响)