日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UNPIVOT的详细说明

發布時間:2025/4/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UNPIVOT的详细说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

unpivot包含3步:1.生成拷貝 2.提取數據 3.過濾不相關的數據 第一步,把每行數據都打散開來,用CROSS JOIN實現 {(1,A),(1,B),(1,C),(1,D)} {(2,A),(2,B),(2,C),(2,D)} ....................

2008語法 SELECT *
FROM dbo.EmpCustOrders
CROSS JOIN (VALUES('A'),('B'),('C'),('D')) AS Custs(custid);
原本的語法 SELECT *
FROM dbo.EmpCustOrders
CROSS JOIN (SELECT 'A' AS custid
UNION ALL SELECT 'B'
UNION ALL SELECT 'C'
UNION ALL SELECT 'D') AS Custs;
empid A B C D
----------- ----------- ----------- ----------- -----------
1 NULL 20 34 NULL
2 52 27 NULL NULL
3 20 NULL 22 30

empid A B C D custid
----------- ----------- ----------- ----------- ----------- ------
1 NULL 20 34 NULL A
1 NULL 20 34 NULL B
1 NULL 20 34 NULL C
1 NULL 20 34 NULL D
2 52 27 NULL NULL A
2 52 27 NULL NULL B
2 52 27 NULL NULL C
2 52 27 NULL NULL D
3 20 NULL 22 30 A
3 20 NULL 22 30 B
3 20 NULL 22 30 C
3 20 NULL 22 30 D

第二步:提取數據 第一步中的表只是為了方便展示第二部的CASE用的 SELECT empid, custid,
CASE custid
WHEN 'A' THEN A
WHEN 'B' THEN B
WHEN 'C' THEN C
WHEN 'D' THEN D
END AS qty
FROM dbo.EmpCustOrders
CROSS JOIN (VALUES('A'),('B'),('C'),('D')) AS Custs(custid);

empid custid qty
----------- --------- -----------
1 A NULL
1 B 20
1 C 34
1 D NULL
2 A 52
2 B 27
2 C NULL
2 D NULL
3 A 20
3 B NULL
3 C 22
3 D 30

第三步,用IS NOT NULL來清除NULL行 SELECT *
FROM (SELECT empid, custid,
CASE custid
WHEN 'A' THEN A
WHEN 'B' THEN B
WHEN 'C' THEN C
WHEN 'D' THEN D
END AS qty
FROM dbo.EmpCustOrders
CROSS JOIN (VALUES('A'),('B'),('C'),('D')) AS Custs(custid)) AS D
WHERE qty IS NOT NULL;
注意PIVOT 和UNPIVOT不是逆反的過程,因為已經聚合過了。

比如說(1 C 34)這行,其中的34就是由元數據表中的
1, 'C', 20
1, 'C', 14
聚合而成。

轉載于:https://www.cnblogs.com/lwzz/archive/2011/01/29/1947567.html

總結

以上是生活随笔為你收集整理的UNPIVOT的详细说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。