[英]SQL group by case statement with COUNT DISTINCT
我在SQL Server 2012中的表如下所示:
SaleDate CustomerID Customer
2014-03-01 NULL George
2014-03-01 NULL John
2014-03-01 125 Emy
2014-04-01 126 Natasha
2014-04-01 127 NULL
2014-05-01 128 Jack
考慮到以下幾點,我想找出每個銷售日期的唯一客戶數:
所需的輸出是:
SaleDate UniqueCustomers
2014-03-01 3
2014-04-01 2
2014-05-01 1
我嘗試了此查詢,但是-當然-我收到以下錯誤: 無法在用於GROUP BY子句的group by列表的表達式中使用聚合或子查詢 :
SELECT SaleDate,
CASE
WHEN Customer IS NULL THEN COUNT(DISTINCT CustomerID)
ELSE COUNT(DISTINCT Customer)
END AS "UniqueCustomers"
FROM TableA
GROUP BY SaleDate,
CASE
WHEN Customer IS NULL THEN COUNT(DISTINCT CustomerID)
ELSE COUNT(DISTINCT Customer)
END
無法更新表以擺脫NULL值。
那不是正確的方法。 在case statement
之外使用Count
。
考慮到CustomerID
是一個Integer
列。 嘗試這個
SELECT SaleDate,
Count(DISTINCT CASE
WHEN Customer IS NULL THEN CONVERT(VARCHAR(50), CustomerID)
ELSE Customer
END) AS UniqueCustomers
FROM Yourtable
GROUP BY SaleDate
嘗試這個:
SELECT PreparedTable.SaleDate, SUM(PreparedTable.Uniques)
FROM
(
SELECT SaleDate, COUNT(DISTINCT CustomerID) as Uniques
FROM TableA
GROUP BY SaleDate
UNION ALL
SELECT SaleDate, COUNT(DISTINCT Customer)
FROM TableA
WHERE CustomerID is null
GROUP BY SaleDate
) PreparedTable
GROUP BY SaleDate
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.