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

时间:2016-07-06 22:26:39

标签: sql excel vba

我有两张桌子;即

表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调用来完成此操作,因此单个查询调用将是理想的。

1 个答案:

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