SQL – 在组合行时跨表查询匹配数据

我有两张桌子; 即

表格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 

我想要生成一个如下所示的组合表:

 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调用这样做,所以一个单一的查询调用将是理想的。

这被称为表转轴。 一些数据库支持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