sql - 转置和扩展列数据集 T-SQL
解决方案
UnPivot 的性能当然更高,但如果您想在不实际使用 Dynamic SQL 的情况下动态取消数据透视,请考虑以下事项
例子
Select A.fruiteater
,C.*
From fruits A
Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
Cross Apply (
Select Item = a.value('local-name(.)','varchar(100)')
,Value = a.value('.','varchar(max)')
From B.XMLData.nodes('/row') as C1(n)
Cross Apply C1.n.nodes('./@*') as C2(a)
Where a.value('local-name(.)','varchar(100)') not in ('fruiteater','OtherColumnsToExclude')
) C
退货
fruiteater Item Value
Aaron Fruit1 Orange
Aaron Fruit2 Pear
Aaron Fruit3 Apple
Bob Fruit1 Apple
Bob Fruit2 Orange
Bob Fruit3 Blueberries
Bob Fruit4 Peach
Bob Fruit5 Mango
Bob Fruit6 Banana
Carter Fruit1 Pear
Carter Fruit2 Orange
Carter Fruit3 Apple
David Fruit1 Blueberries
Earnest Fruit1 Mango
Earnest Fruit2 Orange
Earnest Fruit3 Pear
Earnest Fruit4 Apple
Earnest Fruit5 Blueberries
Frank Fruit1 Raspberries
推荐阅读
- python - Why does Chainer Batchnormalization not work well with mnist_nn
- swift - Swift Codable 如何使用 Any 类型?
- hadoop - Error while inserting data into partitioned external table in hive
- r - 如何创建多个子集?
- tfs - 在我将新项目添加到 tfs 之前,我的新项目是否应该已经在映射到目录中?
- css - 使用“rect”或“circle”等基元时,内联 SVG 不可见
- java - Java 和 JavaFX 版本是否必须匹配?
- angular - 有什么方法可以在角度创建沙钟
- angular - 强制 Angular flex-layout 检查布局大小
- javascript - MySQL IN 只返回数组中第一项的结果