Сегодня я создавал запрос, и я застрял. У меня есть два уникальных идентификатора, которые определяют, является ли порядок внутренним или веб-. Я смог разделить это, чтобы он подсчитывал, сколько раз они появляются, но, к сожалению, это не дает мне ожидаемого результата. Из исследования я попытался создать оператор 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. Ниже приведен мой запрос, который я сейчас использую. Это извлечение из ODBC Progress V10, которое я подключаю через Excel. К сожалению, у меня нет 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. Вы можете попробовать либо полностью удалить else, как это предлагается в ответе @GordonLinoff, либо использоватьELSE null
. - person Andrew   schedule 08.03.2019