我在将一些逻辑合并到大型 SQL 查询中时遇到了麻烦。我将 SQL Server Reporting Services 2005 与报表设计器一起使用,它只为您提供了一个区域来定义单个 SQL 查询来填充报表。希望有人可以告诉我我的语法有什么问题,以便我可以运行它。
我不仅需要选择一组按 (QuoteOrderStatus != 'Closed') 过滤的属性,而且还需要在 COUNT(DISTINCT ItemID's) 语句(聚合函数)中只计算带有 (ItemStatus != 'inactive') 的引号. 我不想简单地过滤掉带有非活动项的引号,因为我仍然想显示带有零项的引号。我只想不将它们包括在总 itemCount 中。
我做了研究,似乎完成这种类型的逻辑的方法是使用 CASE 语句,但我无法将它们合并到这个混淆查询中。报表设计器只是告诉我这是错误的,然后将其重新排列为我更不想要的方式。任何人都可以帮助我修复此语句,以便将其作为有效查询接受吗?
我已经研究了几个小时,但没有找到解决这种特定问题的好资源。抱歉,如果代码不清楚,我会尽力解释这一点。如果您希望我以某种方式澄清,请提出问题,我感谢任何人可以提供的任何帮助。
SELECT DISTINCT
BIAdmin.Quote.QuoteOrderSalesOffice, BIAdmin.Quote.ManufacturerQuoteNumber,
BIAdmin.Quote.CustomerName, BIAdmin.Quote.Project_JobTitle,
BIAdmin.Quote.EndUserName, BIAdmin.Quote.QuoteOrderStatus,
SUM(BIAdmin.Item.TotalPriceOfItemNumber) AS totalValue, BIAdmin.Item.ItemStatus
FROM BIAdmin.Quote LEFT OUTER JOIN BIAdmin.Item ON BIAdmin.Quote.ID = BIAdmin.Item.QuoteID
WHERE BIAdmin.Item.ItemStatus LIKE
CASE WHEN NOT (BIAdmin.Item.ItemStatus = 'inactive') THEN
SELECT DISTINCT COUNT(BIAdmin.Item.ID) AS itemCount
GROUP BY BIAdmin.Quote.QuoteOrderSalesOffice, BIAdmin.Quote.ManufacturerQuoteNumber,
BIAdmin.Quote.CustomerName, BIAdmin.Quote.Project_JobTitle,
BIAdmin.Quote.EndUserName, BIAdmin.Quote.QuoteOrderStatus, BIAdmin.Item.ItemStatus
HAVING (NOT (BIAdmin.Quote.QuoteOrderStatus = N'[Closed]'))