揭开 SQL Server 中 PIVOT 的秘密
我们经常会遇到一些数据集,其中数据的结构化方式使得分析变得困难并以有意义的形式呈现。当数据被组织成多个列时,就会出现这样的一种情况,每个列代表特定类别的不同值。要将这些数据集转换为以类别为列、值为行的表,我们可以在 SQL Server 中使用 PIVOT 运算符。
让我们考虑一个场景,其中我们有一个名为“mytable”、列为“Name1”的表、“名称2”和“值”。此表中的数据代表与不同名称(“A”和“B”)关联的各种值(“P1”、“P2”、“P3”、“P4”):
Name1 Name2 Value A P1 1 A P2 1 A P3 2 B P1 3 B P2 1 B P4 1
我们的目标是将这些数据重组为以下格式:
A B P1 1 4 P2 1 1 P3 2 NULL P4 NULL 1
在 SQL Server 2005 中,我们可以利用动态查询构造来使用 PIVOT 来完成此转换。以下是分步指南:
组装以逗号分隔的列名称字符串: 执行以下查询以创建一个包含所有不同“Name1”的字符串" 值之间用逗号:
DECLARE @cols VARCHAR(1000) SELECT @cols = STUFF(( SELECT distinct ',' + QuoteName([Name1]) FROM myTable FOR XML PATH('') ), 1, 1, '')
构造动态 SQL 查询: 创建一个名为 @sqlquery 的变量,并为其分配以下查询模板:
DECLARE @sqlquery VARCHAR(2000) SET @sqlquery = 'SELECT * FROM (SELECT Name2, Name1, Value FROM myTable ) base PIVOT (Sum(Value) FOR [Name1] IN (' + @cols + ')) AS finalpivot'
此方法根据“Name1”列中的不同值动态构造 PIVOT 子句。 PIVOT 函数对每个“Name1”类别的“Value”列求和,结果是一个表格,其中“Name2”值用作行标题,“Name1”类别形成列标题。
作为一般根据规则,每当您需要将数据从面向列的结构转换为面向行的结构时,都可以使用 PIVOT。该技术可以显着简化数据分析和演示任务。
以上是SQL Server 的 PIVOT 运算符如何将多列数据重塑为面向行的格式?的详细内容。更多信息请关注PHP中文网其他相关文章!