[英]Count distinct case when SQL
想知道我是否可以得到一些幫助。 我對 SQL 還是個新手,我每天都在學習嘗試做一些更復雜的事情。
我有一個數據集,其中包含重復的訂單號。 由此我想做兩件事:首先,我正在計算唯一訂單號的數量,然后是所有訂單號的總和。
我已經設法實現了其中的第二部分,但是在執行不同訂單號的計數時遇到了一些困難。
請參閱下面我的查詢,我知道我的連接現在不正確,因為我稍后會處理它們。 我正在使用 ODBC 進度 v10,並使用 Microsoft 查詢管理器提取並在記事本中手寫代碼,然后傳輸回 Excel,因為目前我的公司無法獲得 SSMS。
SELECT
Company_0.CoaCompanyName,
SopOrder_0.SooOrderDate,
COUNT(DISTINCT CASE WHEN SopOrder_0.SooOrderNumber = SopOrder_0.SooOrderNumber THEN 1 ELSE 0 END) AS 'Orders',
SUM(CASE WHEN SopOrder_0.SooOrderNumber IS NOT NULL THEN 1 ELSE 0 END) AS 'Order Items',
SopOrderItem_0.SoiValue,
SopOrder_0.SooParentOrderReference
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'
當前數據看起來像
Company Name Order Numbers
-------------------------------------
CompanyA Orderno1
CompanyA Orderno1
CompanyB Orderno2
CompanyB Orderno3
CompanyB Orderno3
CompanyB Orderno3
我希望它看起來如何:
Company Name Orders Order Items
-------------------------------------------------
CompanyA 1 2
CompanyB 2 4
您可以使用count (distinct..)
、 count(*)
和group by
SELECT
Company_0.CoaCompanyName
, Count(DISTINCT SopOrder_0.SooOrderNumber ) AS Orders
, count(*) AS `Order Item`
FROM SBS.PUB.Company Company_0
INNER JOIN SBS.PUB.SopOrder SopOrder_0 ON Company_0.CompanyID = SopOrder_0.CompanyID
INNER JOIN SBS.PUB.SopOrderItem SopOrderItem_0 ON SopOrder_0.SopOrderID = SopOrderItem_0.SopOrderID
WHERE SopOrder_0.SooOrderDate > '2019-01-01'
GROUP BY Company_0.CoaCompanyName
為了可讀性,您應該使用顯式join
語法並避免基於where
條件的舊式隱式join
語法。
對於復合列名稱,您可以使用反引號(“ `
”)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.