我有一个名为Transactions
的表,其中包含以下列:
Invoice Number
Status (failed, success or defect)
我基本上想要一个查询,它允许我从事务表中选择所有失败的invoice_numbers,然后再次失败(基本上所有从未设法通过的发票)。
因此,上表中的大多数发票可以立即成功,失败然后成功或失败然后失败。我想要失败并成为失败者。
例如,如果我在表格中有这些数据:
Invoice Number | Status
-----------------+----------
111 | Fail
111 | Success
222 | Fail
222 | Fail
222 | Fail
我想要一个返回所有发票的查询,例如222.它已经失败并且从未成功过。
有什么想法吗?感谢
答案 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中。获取所有成功的发票号码,不要选择它们。