InvoiceID Status
========= =======
1 Incompleted
1 Incompleted
2 Completed
2 Incompleted
3 Completed
3 Completed
4 Incompleted
4 Incompleted
4 Completed
InvoiceID Status
========= ======
1 Incompleted
2 Incompleted
3 Completed
4 Incompleted
分组的逻辑是,
如果在对“ID”和“状态”进行分组时,“状态”列中存在未完成,则
然后返回“Incompleted”;
如果在分组时,“状态”列中仅存在已完成,则
然后返回“已完成”;
SELECT InvoiceID, Status
FROM Invoice
GROUP BY InvoiceID, Status
(这个sql输出的结果不是我预期的。而且我不知道如何在Status列中实现逻辑)
任何人都有这个想法?提前谢谢。
答案 0 :(得分:4)
试试这个:
SELECT InvoiceID, MAX(Status)
FROM Invoice
GROUP BY InvoiceID
Sql Server应该认为Incompleted大于Completed。如果InvoiceID中有任何Incompleted,则会返回,否则为Completed。如果您有一个奇怪的coalation并且MAX返回Completed,那么只需使用min。
答案 1 :(得分:0)
SELECT distinct st1.InvoiceID, 'Incompleted' as Status FROM StatusTest st1
where InvoiceID in
(select distinct InvoiceID from StatusTest st2 where status = 'Incompleted')
UNION
SELECT distinct st1.InvoiceID, 'Completed' as Status FROM StatusTest st1
where InvoiceID not in
(select distinct InvoiceID from StatusTest st2 where status = 'Incompleted')
order by InvoiceID