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

分解表以透视列(SQL,PYSPARK)

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

分解表以透视列(SQL,PYSPARK)

表脚本和样本数据

CREATE TABLE [TableName](    [year] [nvarchar](50) NULL,    [month] [int] NULL,    [total] [int] NULL,    [loop] [nvarchar](50) NULL)INSERT [TableName] ([year], [month], [total], [loop]) VALUES (N'2012', 1, 20, N'loop1')INSERT [TableName] ([year], [month], [total], [loop]) VALUES (N'2012', 2, 30, N'loop1')INSERT [TableName] ([year], [month], [total], [loop]) VALUES (N'2012', 1, 10, N'loop2')INSERT [TableName] ([year], [month], [total], [loop]) VALUES (N'2012', 2, 5, N'loop2')INSERT [TableName] ([year], [month], [total], [loop]) VALUES (N'2012', 1, 50, N'loop3')INSERT [TableName] ([year], [month], [total], [loop]) VALUES (N'2012', 2, 60, N'loop3')

使用枢轴功能…

SELECt * FROM   TableName       PIVOT(Max([total])  FOR [loop] IN ([loop1], [loop2], [loop3]) ) pvt

在线演示:http :
//www.sqlfiddle.com/#!18/ 164a4/1
/0

如果您正在寻找动态解决方案,请尝试此…(Dynamic Pivot)

DECLARE @cols AS NVARCHAr(max) = Stuff((SELECt DISTINCT ',' + Quotename([loop])         FROM   TableName         FOR xml path(''), type).value('.', 'NVARCHAr(MAX)'), 1, 1, '');DECLARE @query AS NVARCHAr(max) =  'SELECt *    FROM   TableName          PIVOT(Max([total])     FOR [loop] IN ('+ @cols +') ) pvt';EXECUTE(@query)

在线演示:http :
//www.sqlfiddle.com/#!18/ 164a4/3
/0

输出

+------+-------+-------+-------+-------+| year | month | loop1 | loop2 | loop3 |+------+-------+-------+-------+-------+| 2012 |     1 |    20 |    10 |    50 || 2012 |     2 |    30 |     5 |    60 |+------+-------+-------+-------+-------+


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

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

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