【发布时间】:2014-05-19 06:17:07
【问题描述】:
我有两张桌子:Invoices 和 InvoiceDrafts。
在Invoices 中有一个名为InvoiceDraftNumber 的列对应于InvoiceDraft 表中的InvoiceDraftNumber。
如果发票使用发票草稿,则发票草稿编号将出现在 Invoice 表的 InvoiceDraftNumber 列中。如果发票未使用任何发票草稿,则 null 将出现在 Invoice 表中的列 InvoiceDraftNumber 中。发票可以处于已发送或已拒绝状态。发票汇票只能使用一次,但如果使用过的发票被拒绝,则可以再次使用发票汇票。我需要通过这种方式检查发票草稿是否已被使用:
- 取我需要检查的发票草稿号('12345')
- 如果没有发票使用它(选择表单 Invoices where InvoiceDraftNumber = '12345')- 将给出 0 行,如果有一些行,则所有选定的行都应处于拒绝状态。
我有一个来自多个选择的大工作查询 - select on select ,但我想要更优雅的东西。
这是我想出的,但我认为我的查询存在一些问题:
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,那么我可以使用此发票草稿
这个查询会给我预期的结果吗?
【问题讨论】:
-
是否可以用另一种方式表达这句话:“对于任何特定的
InvoiceDraftNumber值,最多一个Invoice条目可以是'Sent'”? -
不,抱歉。改写为“发票号码不在发票中,或者如果在发票中,则所有状态均为“拒绝””
-
所以一旦草稿被拒绝,就不能永远被成功使用吗?如果它永远无法成功,允许它被重用有什么意义?
-
相反,如果发票被拒绝(我们说的发票使用发票草稿),则发票草稿可以再次使用。发票草稿一张发票只能使用一次,但如果发票已被拒绝,则发票草稿被视为未使用,因为使用它的发票不再有效
-
所以,在 some 点,草稿将被再次使用,如果它成功了,你会不会以 one 行结束
Sent的状态,在那之后,您不想再次使用该号码?
标签: sql sql-server