2012-11-30 85 views
1

我有兩個表,人(id,phonetype,phonenumber),phonetype(id,txtDisplay)。例如如何使用一個表中的數據作爲列將兩個表合併到一個表中?

Phonetye

Id txtDisplay 
1 Home Phone 
2 Work Phone 
3 Mobile Phone 

Id phonetype phonenumber 
0001 1  6310001111 
0001 2  6310001112 
0002 3  5160002113 
0003 2  7180003112 

結果表應該是

Id home_phone work_phone mobile_phone 
0001 6310001111 6310001112 
0002     5160002113 
0003   7180003112 

我如何寫這樣的查詢?

+0

這是什麼RDBMS? –

+3

@MahmoudGamal,假設任何人標記他們的問題'sql'正在談論Microsoft SQL Server。微軟喜歡假裝通用詞彙總是指他們的*產品。參看Microsoft Word,Microsoft Windows,Microsoft Money。 :-) –

+0

@BillKarwin - 有趣的是,這裏有很多用戶。 [這裏是一個示例](http://stackoverflow.com/questions/13685394/sql-dynamic-date-comparison#comment18788200_13685394) –

回答

3

,如果你已經知道了所有的手機類型這隻會工作:

SELECT 
    id, 
    max(case when phonetype=1 then phonenumber end) as home_phone, 
    max(case when phonetype=2 then phonenumber end) as work_phone, 
    max(case when phonetype=3 then phonenumber end) as mobile_phone 
FROM Person 
GROUP BY id 
2

在SQL中,列名必須在查詢解析的時間是已知的。您不能編寫一個查詢,根據查找到的數據自動擴展列數。

你可以,但是這樣做在兩個查詢:

  1. 首先,獲取所有從PHONETYPE表中的不同電話號碼的類型。

  2. 其次,編寫代碼添加儘可能多的列,因爲您有不同的電話號碼類型。

的Microsoft SQL Server支持PIVOT操作,有​​助於爲這些類型的查詢一點點,但你還是必須知道所有您要列不同的值。所以我上面的兩步過程適用於Microsoft以及任何其他SQL實現。

相關問題