我有一个表1:
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
Table2的Table1ID映射到Table1的ID。现在,我希望将Table1属性列值显示为列标题,并具有以下格式的结果集:
RecordID Name City Designation
1 David Tokyo NULL
2 Scott NULL Manager
在T-SQL 中实现此目的的最佳/有效方法是什么?考虑到Table1中的记录数(即结果集中的列)可以更改,因此应该动态处理。< / p>
虽然我尝试了基于PIVOT和CASE的查询,但一直在与它们挣扎。 :(
任何帮助/指导都将不胜感激。
谢谢!
更新
我已经能够创建动态查询,但有一点我仍然无法理解,为什么MAX已经在CASE语句中使用。请理睬我的无知。
答案 0 :(得分: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