2017-05-17 94 views
0

我目前有两个表,我想一起查询。 一个用户可以看到文件编号,它通过fileID连接到第二个表。SQL将行组合成一个

第二张表由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测试时,看到重复的行。

+0

是。你目前的查询是什么?目前的结果是什么?期望的结果是什么?检查http://stackoverflow.com/help/how-to-ask – Degan

回答

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;