【发布时间】:2019-03-08 15:00:06
【问题描述】:
我今天一直在建立一个查询,但我卡住了。我有两个唯一的 ID,用于标识订单是内部还是 Web。我已经能够将其拆分出来,因此它可以计算它们出现的次数,但不幸的是它没有为我提供预期的结果。根据研究,我尝试创建一个 Count Distinct Case When 语句来为我提供结果。
请看下面我在哪里分解了它正在做什么以及我期望它如何。
原始数据如下:
Company Name Order Date Order Items Orders Value REF
-------------------------------------------------------------------------------
CompanyA 03/01/2019 Item1 Order1 170 INT1
CompanyA 03/01/2019 Item2 Order1 0 INT1
CompanyA 03/01/2019 Item3 Order2 160 WEB2
CompanyA 03/01/2019 Item4 Order2 0 WEB2
我希望它是怎样的:
Company Name Order Date Order Items Orders Value WEB INT
-----------------------------------------------------------------------------------------
CompanyA 03/01/2019 4 2 330 1 1
目前的结果
Company Name Order Date Order Items Orders Value WEB INT
-----------------------------------------------------------------------------------------
CompanyA 03/01/2019 4 2 330 2 2
从我当前的结果中可以看出,它正在计算每一行,即使它是相同的引用。现在,它总是加倍并不是一个硬性规定。这就是为什么我认为我需要一个 Count Distinct Case When。以下是我目前正在使用的查询。这来自我通过 Excel 连接的 Progress V10 ODBC。不幸的是,我没有 SSMS,Microsoft Query 也没用。
我当前的 SQL:
SELECT
Company_0.CoaCompanyName
, SopOrder_0.SooOrderDate
, Count(DISTINCT SopOrder_0.SooOrderNumber) AS 'Orders'
, SUM(CASE WHEN SopOrder_0.SooOrderNumber IS NOT NULL THEN 1 ELSE 0 END) AS 'Order Items'
, SUM(SopOrderItem_0.SoiValue) AS 'Order Value'
, SUM(CASE WHEN SopOrder_0.SooParentOrderReference LIKE 'INT%' THEN 1 ELSE 0 END) AS 'INT'
, SUM(CASE WHEN SopOrder_0.SooParentOrderReference LIKE 'WEB%' THEN 1 ELSE 0 END) AS 'WEB'
FROM
SBS.PUB.Company Company_0
, SBS.PUB.SopOrder SopOrder_0
, SBS.PUB.SopOrderItem SopOrderItem_0
WHERE
SopOrder_0.SopOrderID = SopOrderItem_0.SopOrderID
AND Company_0.CompanyID = SopOrder_0.CompanyID
AND SopOrder_0.SooOrderDate > '2019-01-01'
GROUP BY
Company_0.CoaCompanyName
, SopOrder_0.SooOrderDate
我尝试使用以下行,但在导入时出现错误:
, Count(DISTINCT CASE WHEN SopOrder_0.SooParentOrderReference LIKE 'INT%' THEN SopOrder_0.SooParentOrderReference ELSE 0 END) AS 'INT'
知道我在导入时遇到的错误是“CASE WHEN sopOrder_0.SooParentOrderRefer”(10713) 处或附近的语法错误
【问题讨论】:
-
Count(0)仍将返回 1。您可以尝试按照 @GordonLinoff 答案中的建议完全删除 else,或使用ELSE null。
标签: sql distinct openedge case-when progress-db