我在創建 SQL Server 查詢時遇到問題。
總之,查詢應該得到 sum 和 count、grouped by 的customerID列,以及另一列,即不用作 grouper 列的列。
我的問題是只對部分語法進行分組,而不需要對列進行分組的情況。
樣本資料,測驗:
customerID, 1,2,3,4...
InvoiceID, 1234551, 1234552...
ProductID, A, B, C...
Date, Datetime
Income, int
| 客戶ID | 發票編號 | 產品編號 | 日期 | 收入 |
|---|---|---|---|---|
| 1 | 1234551 | 一種 | 2015 年 1 月 1 日 | 300 |
| 2 | 1234552 | 乙 | 2016 年 2 月 1 日 | 300 |
我有一個解決方案,但我確信有一個更簡單的解決方案。
SELECT DISTINCT
Test.CustomerId,
ISNULL(TBL.Income_2015, 0) AS Income_2015,
ISNULL(TBL_2.Income_2016, 0) AS Income_2016,
CASE
WHEN Test.ProductID = 'A'
THEN 'TRUE'
ELSE 'FALSE'
END AS 'purchase_product_A',
TBL_3.Invoices
FROM
Test
LEFT OUTER JOIN
(SELECT CustomerId, SUM(Income) AS Income_2015
FROM Test
WHERE YEAR(Date) = 2015
GROUP BY CustomerId) TBL ON Test.customerID = TBL.customerID
LEFT OUTER JOIN
(SELECT CustomerId, SUM(Income) AS Income_2016
FROM Test
WHERE YEAR(Date) = 2016
GROUP BY CustomerId) TBL_2 ON Test.customerID = TBL_2.customerID
LEFT OUTER JOIN
(SELECT CustomerId, COUNT(InvoiceID) AS Invoices
FROM Test
GROUP BY CustomerId) TBL_3 ON Test.customerID = TBL_3.customerID
生產:
customerID, 1,2,3...
Income_2015, int
Income_2016, int
Invoices, int
Purchase_product_A, boolean
| 客戶ID | 收入_2015 | 收入_2016 | 發票 | 采購_產品_A |
|---|---|---|---|---|
| 1 | 300 | 300 | 2 | 真的 |
| 10 | 0 | 400 | 1 | 錯誤的 |
謝謝!尼爾
uj5u.com熱心網友回復:
您可以將條件聚合與單遍查詢一起使用:
SELECT
CustomerId,
SUM(CASE WHEN YEAR(Date) = 2015 THEN Income ELSE 0 END) AS Income_2015,
SUM(CASE WHEN YEAR(Date) = 2016 THEN Income ELSE 0 END) AS Income_2016,
COUNT(InvoiceID) AS Invoices,
CASE WHEN COUNT(CASE WHEN ProductID = 'A' THEN 1 END) > 0
THEN 'TRUE' ELSE 'FALSE' END AS [Purchase_product_A]
FROM Test
GROUP BY
CustomerId;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/430072.html
上一篇:僅選擇一列中的日期介于其他列中的兩個日期之間的行?[復制]
下一篇:允許存盤程序接受值
