为了描绘这幅画,这是我当前的表格:
Name Size1 Size2 Size3 Size4
-----------------------------------------
Test 100 200 0 10
Test 2 50 0 100 50
Test 3 70 100 60 40
这是一张过时的 table ,切片和切 block 非常困难。我想做的是转置尺寸列并根据尺寸的数量扩展行。
例如:
Name Size Values
----------------------
Test 1 100
Test 2 200
Test 4 10
Test 2 1 50
Test 2 3 100
Test 2 4 50
Test 3 1 70
Test 3 2 100
Test 3 3 60
Test 3 4 40
我的问题:这可能吗,还是我在做梦?
把我的头抓到秃顶......希望得到任何见解!
干杯
最佳答案
使用cross apply (values ())
来逆透视您的数据:
select t.Name, v.Size, v.Value
from t
cross apply (values
(1,Size1),(2,Size2),(3,Size3),(4,Size4)
) v (Size, Value)
where v.Value<>0
rextester 演示:http://rextester.com/PPLRR33530
返回:
+--------+------+-------+
| Name | Size | Value |
+--------+------+-------+
| Test | 1 | 100 |
| Test | 2 | 200 |
| Test | 4 | 10 |
| Test 2 | 1 | 50 |
| Test 2 | 3 | 100 |
| Test 2 | 4 | 50 |
| Test 3 | 1 | 70 |
| Test 3 | 2 | 100 |
| Test 3 | 3 | 60 |
| Test 3 | 4 | 40 |
+--------+------+-------+
关于SQL Server : expand rows and transpose columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46310947/