TSQL中nvarchar列上的交叉表/透视查询

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

我有一张表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
考虑到表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的语法。:)