2010-08-25 153 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