SQL将行组合成一个

时间:2017-05-17 22:40:40

标签: sql

我目前有两个表,我想一起查询。 一个文件编号由用户看到,它通过fileID连接到第二个表。

第二个表由3列组成。 fileID,一个ID,显示数据所在字段的12个选项中的哪一个,以及每个相应字段中的数据。 对于每种字段类型,第二个表的每个fileID显示12次。我希望结束查询返回一行;文件号,然后是每12个字段的数据。

目前,当我查询它时,每个文件编号返回12个不同的行。有没有办法获得包含所有相关信息的1行?

当前查询:

SELECT DISTINCT t1.FileNumber
    , CASE WHEN t2.typeID = 1 THEN t2.value END 
    , CASE WHEN t2.typeID = 2 THEN t2.value END 
    , CASE WHEN t2.typeID = 3 THEN t2.value END 
    , CASE WHEN t2.typeID = 4 THEN t2.value END 

FROM t1
LEFT JOIN t2 ON t1.fileID = t2.fileID

ORDER BY t1.FileNumber

我没有使用所有12种数据类型,因为当我看到重复的行时,我只是用4进行测试。

1 个答案:

答案 0 :(得分:0)

使用聚合:

SELECT t1.FileNumber,
       MAX(CASE WHEN t2.typeID = 1 THEN t2.value END),
       MAX(CASE WHEN t2.typeID = 2 THEN t2.value END),
       MAX(CASE WHEN t2.typeID = 3 THEN t2.value END),
       MAX(CASE WHEN t2.typeID = 4 THEN t2.value END)
FROM t1 LEFT JOIN
     t2
     ON t1.fileID = t2.fileID
GROUP BY t1.FileNumber
ORDER BY t1.FileNumber;