用sql连接记录?

用sql连接记录?,sql,join,Sql,Join,我有一张5排的桌子 code | type_id | status -----+--------+-------- 123 | 123456 | DONE 123 | 456789 | DONE 321 | 654321 | DONE 321 | 897321 | DONE 456 | 999888 | DONE 456 | 777666 | FAIL 我想把它改成下面的“完成” code | type_id1 | type_id2 -----+----------+-------

我有一张5排的桌子

code | type_id | status
-----+--------+--------
123  | 123456 | DONE
123  | 456789 | DONE
321  | 654321 | DONE
321  | 897321 | DONE
456  | 999888 | DONE
456  | 777666 | FAIL
我想把它改成下面的“完成”

code | type_id1 | type_id2
-----+----------+---------
123  | 123456   | 456789
321  | 654321   | 897321
456  | 999888   | null

如何加入它们以显示结果?

您可以使用聚合

select 
    code, 
    min(type) type1, 
    case when count(*) > 1 then max(type) end type2 
from mytable
group by code
请注意,仅当代码有1或2种类型时,此功能才按预期工作。

您可以进行左连接,例如:

SELECT 
     A.code, 
     A.type_id, 
     B.type_id
FROM table A 
     LEFT JOIN 
     table B ON A.code = B.code AND A.type_id <> B.type_id AND A.status = B.status
WHERE A.status = 'DONE'

您可以使用cte作为选择代码,输入id、状态、行数,按代码顺序按代码从表中排序

select * from cte where rank =1 and status ='Done'

如果我正确理解您希望每个代码有一行,则可以使用聚合:

select code,
       min(type_id) as type_id1,
       (case when min(type_id) <> max(type_id) then max(type_id) end) as type_id2
from t
where status = 'DONE'
group by code;

请注意,SQL表表示无序集。对于示例数据,无法保留值的原始顺序,因为这是未定义的-除非另一列指定该顺序。

每个代码的类型id不得超过2个?同一类型id是否可以为代码重复?选择nvla.code、b.code作为代码、a.type作为类型id 1,b.type_id作为type_id2从状态为'DONE'的表中选择*从状态为'DONE'的表中选择*在a.code=b.code上从状态为'DONE'的表中选择;这就是我想说的~但是太乱了~非常感谢你的回复!!我学到了很多