TSQL中nvarchar列上的交叉表/透视查询
我有一张表1:TSQL中nvarchar列上的交叉表/透视查询,sql,sql-server-2005,tsql,pivot,dynamic-pivot,Sql,Sql Server 2005,Tsql,Pivot,Dynamic Pivot,我有一张表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。现在我希望将Tab
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
考虑到表1中的记录数(即结果集中的列)可能会发生变化,因此应该动态处理,在T-SQL中实现这一点的最佳/有效方法是什么
虽然我尝试了PIVOT和CASE-based查询,但这两种查询都很困难:(
如有任何帮助/指导,将不胜感激
谢谢
更新:我已经能够创建动态查询,但有一件事我仍然无法理解,那就是为什么在CASE语句中使用MAX。请忽略我的noobness。使用:
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
^^太好了!只有两个问题:1.为什么在每种情况下都使用聚合fn.MAX?2.当t1.Property中的条目数可能发生变化时,如何动态处理CASE语句?非常感谢您的帮助!+1-对于此类问题,最好在我脑海中使用PIVOT-我永远不会记得PIVOT的语法。:)