1

我有一个表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

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

虽然我尝试过基于 PIVOT 和 CASE 的查询,但一直在努力解决这两个问题。:(

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

谢谢!

更新:
我已经能够创建动态查询,但我仍然无法理解的一件事是为什么在 CASE 语句中使用了 MAX。请忽略我的菜鸟。

4

1 回答 1

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
于 2010-08-25T04:06:56.967 回答