2010-08-25 399 views
1

我有一個表1:交叉表/透視查詢上nvarchar列

ID Property 
1 Name 
2 City 
3 Designation 

和表2:

ID RecordID Table1ID Value 
1 1   1   David 
2 1   2   Tokyo 
3 2   1   Scott 
4 2   3   Manager 

表2圖的Table1ID到表1的ID。現在,我希望展現表1屬性列值的列標題,並因此在格式設置,如:

RecordID  Name City Designation 
1   David Tokyo NULL 
2   Scott NULL Manager 

什麼是最好的/有效的方式在T-SQL 實現這一考慮的記錄數在表1中(即結果集中的列)可以更改,因此應該動態處理

雖然我嘗試過基於PIVOT和CASE的查詢,但都一直在努力與他們兩人。 :(

任何幫助/指導,將不勝感激

感謝

更新:!
我已經能夠創建動態查詢,但一件事我還是沒能要明白的是爲什麼MAX已經在CASE語句中使用請忽略我的noobness

回答

3

用途:。

SELECT t2.recordid, 
     MAX(CASE WHEN t1.property = 'Name' THEN t2.value END) AS name, 
     MAX(CASE WHEN t1.property = 'City' THEN t2.value END) AS city, 
     MAX(CASE WHEN t1.property = 'Designation' THEN t2.value END) AS designation 
    FROM TABLE2 t2 
    JOIN TABLE1 t1 ON t1.id = t2.table1id 
GROUP BY t2.recordid 
ORDER BY t2.recordid 
+0

^^太棒了!只有兩個問題:1.你爲什麼使用聚合fn。 MAX是否適用於所有CASE? 2.如何在t1.Property中的條目數量可以更改時動態處理CASE語句?非常感謝您的幫助! – Dienekes 2010-08-25 04:38:03

+0

+1 - 對於這樣的問題,最好在我的腦海中插入PIVOT--我永遠不會記住PIVOT的語法。 :) – 2010-08-25 04:56:24