我有两张桌子;即
表1:
RecordId RecordDescription
1 Red
2 Green
3 Blue
表2:
RecordID FieldID FieldValue
1 10 3.1
1 20 2.8
1 30 4.2
2 20 3.8
3 10 6.6
3 30 5.5
我想生成一个组合表,看起来像: 表3:
RecordID Field10Value Field20Value Field30Value
1 3.1 2.8 4.2
2 3.8
3 6.6 5.5
这似乎应该是非常直接的,但我一直在自己开车。
感觉我应该可以使用:
SELECT * FROM (
SELECT RecordID, Field10Value, Field20Value, Field30Value FROM (
SELECT MAX(CASE WHEN FieldID=10 THEN FieldValue ELSE NULL END) as Field10Value,
SELECT MAX(CASE WHEN FieldID=20 THEN FieldValue ELSE NULL END) as Field20Value,
SELECT MAX(CASE WHEN FieldID=30 THEN FieldValue ELSE NULL END) as Field30Value
FROM Table2)) JOIN Table1 on RecordID
但我似乎无法使我的语法正确,似乎可能有更优雅的方式(我实际上有相当多的FieldID值...)
非常感谢任何帮助。 我实际上是尝试通过excel中的VBA调用来完成此操作,因此单个查询调用将是理想的。
答案 0 :(得分:0)
这称为表旋转。某些数据库支持pivot
子句。您正在使用conditional aggregation
。
以下是您可能会追求的内容:
select t1.recordid, t1.recorddescription,
max(case when t2.fieldid = 10 then t2.fieldvalue end) as field10value,
max(case when t2.fieldid = 20 then t2.fieldvalue end) as field20value,
max(case when t2.fieldid = 30 then t2.fieldvalue end) as field30value
from table1 t1
join table2 t2 on t1.recordid = t2.recordid
group by t1.recordid, t1.recorddescription
如果您不知道fieldid
值的最大数量,则可能需要考虑使用dynamic sql
。