用sql连接记录?
我有一张5排的桌子用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 -----+----------+-------
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'的表中选择;这就是我想说的~但是太乱了~非常感谢你的回复!!我学到了很多