[英]How to return all values in the first column of a table without specifying column's name?
[英]How to transpose a single column in BigQuery without specifying all the values in the column?
我有以下類型的表:
col_A col_B col_C col_D
1 ab cd val1
2 cd ef val2
2 cd ef val3
3 ab bc val4
我想做的是以下幾點:
col_A col_B col_C val1 val2 val3 val4
1 ab cd 1 0 0 0
2 cd ef 0 1 1 0
3 ab bc 0 0 0 1
基本上轉置 col_4 使得其中的每個條目都有一列,值 1 表示該值存在於行中,值 0 表示它不存在於行中。
挑戰在於我不知道 col_4 中可以包含的所有值,因此我需要能夠創建這樣的視圖,而無需創建特定於 col_4 中某些值的 case 語句來創建新列。 知道怎么做嗎?
希望這會有所幫助:您說您事先不知道col_D
中的哪些值,因此需要使用EXECUTE IMMEDIATE
動態創建數據透視查詢。
CREATE TEMP TABLE sample AS
SELECT * FROM UNNEST([STRUCT
(1 AS col_A, 'ab' AS col_B, 'cd' AS col_C, 'val1' AS col_D),
(2, 'cd', 'ef', 'val2'),
(2, 'cd', 'ef', 'val3'),
(3, 'ab', 'bc', 'val4')
]);
EXECUTE IMMEDIATE FORMAT("""
SELECT * FROM sample PIVOT (COUNT(col_A) FOR col_D IN ('%s'));
""", ARRAY_TO_STRING(ARRAY(SELECT DISTINCT col_D FROM sample ORDER BY 1), "','"));
輸出:
如果您想在您的問題中得到完全相同的結果,請嘗試使用此方法而不是之前的查詢。
EXECUTE IMMEDIATE FORMAT("""
SELECT *
FROM (SELECT col_A AS col, * FROM sample)
PIVOT (COUNT(col) FOR col_D IN ('%s'))
ORDER BY 1;
""", ARRAY_TO_STRING(ARRAY(SELECT DISTINCT col_D FROM sample ORDER BY 1), "','"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.