我有两个表:Invoices
和InvoiceDrafts
。
在Invoices
中,InvoiceDraftNumber
表格中有一个名为InvoiceDraftNumber
的列与InvoiceDraft
对应。
如果发票使用了发票草稿,则发票草稿编号将显示在Invoice
列的InvoiceDraftNumber
表格中。如果发票未使用任何发票草稿,则null将显示在Invoice
列的InvoiceDraftNumber
表格中。发票可以处于已发送状态或已拒绝状态。发票草稿只能使用一次,但如果使用它的发票被拒绝,则可以再次使用发票草稿。我需要通过这种方式检查是否已经使用了发票草稿:
我有几个选择的大工作查询 - 选择选择,但我想要更优雅的东西。
这就是我的目标,但我认为我的查询存在一些问题:
SELECT COUNT(Invocies.ID)
FROM InvoiceDrafts DRAFT
LEFT OUTER JOIN Invoices INVOICE on DRAFT.InvoiceDraftNumber = INVOICE.InvoiceDraftNumber
WHERE DRAFT.InvoiceDraftNumber = '12345'
AND (INVOICE.UID is null
OR INVOICE.Status not like 'Rejection')
GROUP BY Status
计数是没有处于“拒绝”状态的行,这意味着如果计数为0,那么我可以使用此发票草稿
这个查询会给我预期的结果吗?
答案 0 :(得分:2)
无需过度思考。我想你想要这样的东西:
SELECT COUNT(*)
FROM Invoices
WHERE InvoiceDraftNumber = '12345'
AND Status <> 'Rejection'
如果返回0,您可以使用该编号创建发票。如果它返回1,则该数字已用完,如果它返回&gt; 1您的数据存在错误。