报告存储过程 - 如何避免重复?
我正在编写一个报告存储过程。我想要获取未确认和未开票的采购订单的数量,并能够(可选)筛选 CustomerID
。
我下面的内容按预期工作,但我担心 a) 它很慢 b) WHERE
子句的 CustomerID
部分存在重复。
你会如何编写这个存储过程,Stack Overflow?
SELECT
(SELECT COUNT(*)
FROM PurchaseOrder
WHERE AcknowledgmentStatus <> 'Complete'
AND (@CustID = 0 OR CustomerID = @CustID)
) AS NonAckd,
(SELECT COUNT(*)
FROM PurchaseOrder
WHERE InvoiceStatus <> 'Complete'
AND (@CustID = 0 OR CustomerID = @CustID)
) AS NonInvoiced
I'm writing a reporting stored procedure. I want to get the number of non-Acknowledged and non-Invoiced Purchase Orders, with the ability to (optionally) filter on CustomerID
.
What I have below works as expected, but I worry that a) it's slow and b) there's duplication in the CustomerID
portion of the WHERE
clause.
How would you write this stored proc, Stack Overflow?
SELECT
(SELECT COUNT(*)
FROM PurchaseOrder
WHERE AcknowledgmentStatus <> 'Complete'
AND (@CustID = 0 OR CustomerID = @CustID)
) AS NonAckd,
(SELECT COUNT(*)
FROM PurchaseOrder
WHERE InvoiceStatus <> 'Complete'
AND (@CustID = 0 OR CustomerID = @CustID)
) AS NonInvoiced
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
像这样的事情:
Something like this:
我不确定 100% 你想要什么,但你可以按如下方式简化客户部分:(未经[疲倦]内存测试)
I'm not sure 100% what you are after, but you could simplify the customer part as follows: (untested from [tired] memory)
您不能使用:
如果您删除状态检查,它当然会运行得更快你可以处理零。
You can't use:
If you remove the status checks it will run faster of course if you can deal with zeros.