要绘制图片,这是我当前的表格:
Name Size1 Size2 Size3 Size4
-----------------------------------------
Test 100 200 0 10
Test 2 50 0 100 50
Test 3 70 100 60 40
这是一张过时的表格,非常难以切片和切块。我想要做的是,根据尺寸大小调换大小列并展开行。
例如:
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
我的问题:这是可能的,还是我在做梦?
把我的头搔到秃顶......会欣赏任何见解!
干杯
答案 0 :(得分:3)
使用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 |
+--------+------+-------+
答案 1 :(得分:0)
这是一个例子:
--Create the table and insert values as portrayed in the previous example.
DECLARE @pvt TABLE
(VendorID int, Emp1 int, Emp2 int,
Emp3 int, Emp4 int, Emp5 int);
INSERT INTO @pvt VALUES (1,4,3,5,4,4);
INSERT INTO @pvt VALUES (2,4,1,5,5,5);
INSERT INTO @pvt VALUES (3,4,3,5,4,4);
INSERT INTO @pvt VALUES (4,4,2,5,5,4);
INSERT INTO @pvt VALUES (5,5,1,5,5,5);
--Unpivot the table.
SELECT VendorID, Employee, Orders
FROM
(SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
FROM @pvt) p
UNPIVOT
(Orders FOR Employee IN
(Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt;