我有一個有趣的難題,我相信可以在純SQL中解決。我有類似的表如下:SQL將行轉換爲列
responses:
user_id | question_id | body
----------------------------
1 | 1 | Yes
2 | 1 | Yes
1 | 2 | Yes
2 | 2 | No
1 | 3 | No
2 | 3 | No
questions:
id | body
-------------------------
1 | Do you like apples?
2 | Do you like oranges?
3 | Do you like carrots?
,我想獲得以下輸出
user_id | Do you like apples? | Do you like oranges? | Do you like carrots?
---------------------------------------------------------------------------
1 | Yes | Yes | No
2 | Yes | No | No
我不知道有多少的問題就會出現,並且他們將是動態的,所以我不能只爲每個問題編碼。我使用PostgreSQL,我相信這被稱爲轉置,但我似乎無法找到任何說SQL的標準方式。我記得在我的大學數據庫課上做這個,但是它在MySQL中,我真的不記得我們是如何做到的。
我假設它將是一個連接和一個GROUP BY
聲明的組合,但我甚至不知道如何開始。
任何人都知道如何做到這一點?非常感謝!
編輯1:我發現了一些關於使用crosstab的信息,這似乎是我想要的,但我無法理解它。更好的文章鏈接將不勝感激!
所以你說我必須建立一個動態查詢基於我有多少個問題?我想我可以做到這一點,但我希望有一個更簡單的解決方案。 – 2010-01-20 05:28:31
@Topher:Oracle和SQL Server有'PIVOT'和'UNPIVOT',但是如果你檢查pivot標籤,你會發現動態查詢在使用這個函數時是很常見的。 – 2010-01-20 05:33:35
感謝您的回答。看起來這將是最容易實現的,即使我必須在運行時生成查詢。 – 2010-01-20 05:40:47