透視條款
適用於:磚的SQLDatabricks Runtime 12.0及以上版本。
屬性的行進行轉換table_reference通過將列組旋轉成行並折疊列出的列:第一個新列保存原始列組名(或別名)作為值,對於每個列組的值,該列後麵是一組列。
語法
table_reference透視[{包括零位|排除零位}]{single_value|multi_value}(value_column為unpivot_column在({column_name[column_alias]}(,...]))[table_alias]single_value(value_column為unpivot_column在({column_name[column_alias]}(,...]))multi_value((value_column(,...])為unpivot_column在({(column_name(,...])[column_alias]}(,...]))
參數
對象的主題
透視
操作。包括零位
或排除零位
是否過濾掉行
零
在value_column
.默認為排除零位
.非限定的列別名。這個列將保存這些值。ech的類型
value_column
最不常見的類型對應嗎column_name
列類型。非限定的列別名。這一列將保存被旋轉對象的名稱
column_name
S或theircolumn_alias
s.類型unpivot_column
是字符串
.如果是多值
透視
的級聯值“_”
分離column_name
S,如果沒有column_alias
.標識將被取消旋轉的關聯列。名稱可以是限定的。所有
column_name
S必須共享一個最小公共類型。中使用的可選名稱
unpivot_column
.可選地為結果表指定一個標簽。如果
table_alias
包括column_identifier
S它們的數量必須匹配生成的列的數量透視
.
結果
臨時表的形式如下:
所有的列
table_reference
除了被命名為column_name
年代。的
unpivot_column
類型的字符串
.的
value_column
S的最小公共匹配類型column_name
年代。
例子
-單列UNPIVOT > CREATE OR REPLACE TEMPORARY VIEW sales(位置,年份,q1, q2, q3, q4) AS VALUES ('Toronto', 2020, 100,80,70,150), ('San Francisco', 2020, NULL, 20,50,60), ('Toronto', 2021, 110,90,80,170), ('San Francisco', 2021, 70,120,85,105);> description SELECT * FROM sales UNPIVOT INCLUDE NULLS(銷售為季度(q1為“1 - 3月”,q2為“4 - 6月”,q3為“7 - 9月”,銷售。q4 AS ' Oct-Dec '));地點年季度銷售- ------------ --------- -----多倫多2020年1月- 3月100多倫多2020年4月- 6月80多倫多2020年7月- 9月70多倫多2020年10月- 12月150舊金山2020年1月- 3月空舊金山2020年4月- 6月20舊金山2020年7月- 9月50舊金山2020年10月- 12月60多倫多2021年1月- 3月110多倫多2021年4月- 6月90多倫多2021年7月- 9月80多倫多2021年10月- 12月170舊金山2021年1月- 3月70舊金山2021年4月- 6月120舊金山2021年7月- 9月85舊金山2021年10月- 12月105——這相當於:> SELECT location, year, inline(arrays_zip(array('Jan-Mar', ' april - jun ', ' july - sep ', 'Oct-Dec'), array(q1, q2, q3, q4)) AS(季度,銷售)FROM sales;- >創建或替換臨時上多列透視視圖oncall(一周,區域,name1、email1 phone1, name2, email2, phone2)作為值(2022,“前端”,“家”,“fred@alwaysup.org”,15551234567,“屁股”,“fanny@lwaysup.org”,15552345678),(2022年,1,“後端”,“鮑裏斯”,“boris@alwaysup.org”,15553456789,“潮”,“boomer@lwaysup.org”,15554567890),(2022年2“前端”、“佛朗基”,“frank@lwaysup.org”,15555678901,“鰭”,“fin@alwaysup.org”,15556789012),(2022年2'backend', 'Bonny', 'bonny@alwaysup.org', 15557890123, 'Bea', 'bea@alwaysup.org', 15558901234);SELECT * FROM oncall UNPIVOT ((name, email, phone) FOR priority IN ((name1, email1, phone1) AS primary, (name2, email2, phone2) AS secondary);年周區域優先級名稱電子郵件電話---------------- ---------------- ------------------ ----------- 2022 1前端primary Freddy fred@alwaysup.org 15551234567 2022 1前端secondary Fanny fanny@lwaysup.org 15552345678 2022 1後端primary Boris boris@alwaysup.org 15553456789 2022 1後端secondary Boomer boomer@lwaysup.org 15554567890 2022 2前端primary frank frank@lwaysup.org 15555678901 2022 2前端secondary Fin fin@alwaysup.org 15556789012 2022 2後端primaryBonny bonny@alwaysup.org 15557890123 2022 2後端次要Bea bea@alwaysup.org 15558901234——這相當於:> SELECT年,周,區域,內聯(arrays_zip(數組('primary', 'secondary'),數組(name1, name2),數組(email1, email2),數組(phone1, phone2)) AS(優先級,名稱,電子郵件,電話)FROM oncall;