簡體   English   中英

SQL用COUNT DISTINCT進行個案分組

[英]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

考慮到以下幾點,我想找出每個銷售日期的唯一客戶數:

  • 在某些情況下,缺少CustomerID (但知道客戶名稱)
  • 並且在某些情況下存在CustomerID (但缺少客戶名)

所需的輸出是:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM