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

SQL复杂动态数据透视2

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

SQL复杂动态数据透视2

如果要将

sequence
数字包括在列名中,则仍然需要先取消透视
col1
col2
列,然后再应用透视。所不同的是,您会将
sequence
数字连接到在取消透视过程中创建的列名。

对于已知数量的值,查询将为:

select REFID,     [1col1], [2col1], [3col1],    [1col2], [2col2], [3col2]from (    select REFID,         col = cast(Sequence as varchar(10))+ col, value    from yourtable    cross apply    (        select 'COL1', col1 union all        select 'COL2', col2    ) c (col, value)) dpivot(    max(value)    for col in ([1col1], [2col1], [3col1],     [1col2], [2col2], [3col2])) pivorder by refid;

然后,如果您有未知的数字,则动态SQL版本将为:

DECLARE @cols AS NVARCHAr(MAX),    @query  AS NVARCHAr(MAX)select @cols = STUFF((SELECT ',' + QUOTENAME(cast(Sequence as varchar(10))+ col)          from yourtable         cross apply         (  select 'Col1', 1 union all  select 'Col2', 2         ) c(col, so)         group by Sequence, col, so         order by  so, sequence         FOR XML PATH(''), TYPE ).value('.', 'NVARCHAr(MAX)')         ,1,1,'')set @query = 'SELECT refid, ' + @cols + '  from  (    select REFID,          col = cast(Sequence as varchar(10))+ col, value     from yourtable     cross apply     (         select ''COL1'', col1 union all         select ''COL2'', col2     ) c (col, value) ) x pivot  (     max(value)     for col in (' + @cols + ') ) p  order by refid'execute sp_executesql @query;


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

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

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