栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在SQL Server中透视固定的多列表

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在SQL Server中透视固定的多列表

这会做您想要的,但是您必须指定所有日期

select   c.Name,   max(case when t.DateCreated = '2013-08-26' then c.Value end) as [2013-08-26],   max(case when t.DateCreated = '2013-08-27' then c.Value end) as [2013-08-27],   max(case when t.DateCreated = '2013-08-28' then c.Value end) as [2013-08-28],   max(case when t.DateCreated = '2013-08-29' then c.Value end) as [2013-08-29],   max(case when t.DateCreated = '2013-08-30' then c.Value end) as [2013-08-30],   max(case when t.DateCreated = '2013-08-31' then c.Value end) as [2013-08-31],   max(case when t.DateCreated = '2013-09-01' then c.Value end) as [2013-09-01]from test as t   outer apply (       select 'Rands', Rands union all       select 'Units', Units union all       select 'Average Price', [Average Price] union all       select 'Success %', [Success %] union all       select 'Unique Users', [Unique Users]   ) as C(Name, Value)group by c.Name

您可以为此创建一个动态SQL,如下所示:

declare @stmt nvarchar(max)select @stmt = isnull(@stmt + ',', '') +     'max(case when t.DateCreated = ''' + convert(nvarchar(8), t.DateCreated, 112) + ''' then c.Value end) as [' + convert(nvarchar(8), t.DateCreated, 112) + ']'from test as tselect @stmt = '   select       c.Name, ' + @stmt + ' from test as t   outer apply (       select ''Rands'', Rands union all       select ''Units'', Units union all       select ''Average Price'', [Average Price] union all       select ''Success %'', [Success %] union all       select ''Unique Users'', [Unique Users]   ) as C(Name, Value)   group by c.Name'exec sp_executesql @stmt = @stmt


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/647470.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号