SQL Server:成功与失败的组合

时间:2018-05-30 09:14:33

标签: sql sql-server

我有一个名为Transactions的表,其中包含以下列:

Invoice Number
Status (failed, success or defect)

我基本上想要一个查询,它允许我从事务表中选择所有失败的invoice_numbers,然后再次失败(基本上所有从未设法通过的发票)。

因此,上表中的大多数发票可以立即成功,失败然后成功或失败然后失败。我想要失败并成为失败者。

例如,如果我在表格中有这些数据:

Invoice Number   |   Status
-----------------+----------    
111              |   Fail    
111              |   Success    
222              |   Fail    
222              |   Fail    
222              |   Fail

我想要一个返回所有发票的查询,例如222.它已经失败并且从未成功过。

有什么想法吗?感谢

3 个答案:

答案 0 :(得分:2)

以下查询应该适合您的情况。

使用EXISTS

SELECT * FROM Transactions T1
WHERE NOT EXISTS
(
 SELECT 1 FROM Transactions T2
 WHERE T2.[Invoice Number] = T1.[Invoice Number] AND T2.Status='Success'
)

使用NOT IN

SELECT * FROM Transactions T1
WHERE [Invoice Number] NOT IN
(
 SELECT DISTINCT [Invoice Number] FROM Transactions WHERE  Status='Success'
)

注意: 如果您需要不同的记录,可以使用GROUP BY或在DISTINCT子句中使用SELECT

答案 1 :(得分:1)

您也可以进行聚合:

select t.InvoiceNumber
from table t 
group by InvoiceNumber
having min(status) = max(status) and min(status) = 'Fail';

答案 2 :(得分:0)

这样的东西
select distinct invoice_number
from transactions
where invoice_number not in (select invoice_number 
                            from transactions 
                            where status = 'Pass')

IE中。获取所有成功的发票号码,不要选择它们。