读书人

行列转换后怎么加下求和列?

发布时间: 2012-12-30 10:43:15 作者: rapoo

行列转换后,如何加上求和列?????

大版那里不是有专门额外加上求和列的写法吗?
[解决办法]
OH


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 行受影响)

读书人网 >SQL Server

热点推荐