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

时间:2010-08-25 04:04:00

标签: 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。现在,我希望将Table1属性列值显示为列标题,并具有以下格式的结果集:

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

在T-SQL 中实现此目的的最佳/有效方法是什么?考虑到Table1中的记录数(即结果集中的列)可以更改,因此应该动态处理。< / p>

虽然我尝试了基于PIVOT和CASE的查询,但一直在与它们挣扎。 :(

任何帮助/指导都将不胜感激。

谢谢!

更新
我已经能够创建动态查询,但有一点我仍然无法理解,为什么MAX已经在CASE语句中使用。请理睬我的无知。

1 个答案:

答案 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