2016-06-09 46 views
2

我正在使用Presto。如果我有這樣一個表:如何快速變平SQL表

ID CATEGORY  VALUE 
1  a   ... 
1  b 
1  c 
2  a 
2  b 
3  b 
3  d 
3  e 
3  f 

你會如何轉換成以下,而無需編寫一個case語句爲每個組合?

ID  A  B C D E F 
1 
2 
3 
+0

您正在使用哪些數據庫軟件?許多人都有一個PIVOT功能,但語法差異很大。搜索您的服務器軟件的文檔PIVOT,看看是否不適合你。我還會指出_dynamic_ pivoting ig通常在顯示(報告,應用)層中更容易。 –

+0

我正在使用Presto。將調查樞軸。 – Moosa

+0

我在這裏快速瀏覽了Presto doco:https://prestodb.io/docs/current/並且看不到任何類似於pivot的東西。你爲什麼不想用案例?再次,這最好是在顯示層完成......當然一個原因是在顯示層中,在每個列存在之前不需要知道每列。 –

回答

2

我從來沒有用過的Presto和文檔似乎相當薄,但基於this article它看起來像你可以做

SELECT 
    id, 
    kv['A'] AS A, 
    kv['B'] AS B, 
    kv['C'] AS C, 
    kv['D'] AS D, 
    kv['E'] AS E, 
    kv['F'] AS F 
FROM (
    SELECT id, map_agg(category, value) kv 
    FROM vtable 
    GROUP BY id 
) t 

雖然我建議在可能的話顯示層這樣做因爲你必須指定列。大多數報告工具和用戶界面網格都支持某種基於源數據創建列的動態透視。

0

我的2美分:

如果你知道 「可能」 的值:

SELECT 
    m['web'] AS web, 
    m['shopping'] AS shopping, 
    m['news'] AS news, 
    m['music'] AS music, 
    m['images'] AS images, 
    m['videos'] AS videos, 
    m[''] AS empty 
FROM (
SELECT histogram(data_tab) AS m 
FROM datahub 
WHERE 
    year = 2017 
    AND month = 5 
    AND day = 7 
    AND name = 'search' 
) searches 

沒有旋轉功能(還)!