[英]Filtering multiple aggregated columns
所以我有一個銷售數據庫,我必須按星期幾對銷售進行分組,以便每一天都有自己的選定月份的列。 我需要過濾掉沒有銷售的一天的總和(結果仍然為 NULL),我確實在 where 子句中添加了 s.Amount_sold>0 但我不確定這是否是正確的解決方案問題。 我一直在想一種方法,而不是僅僅重復 where / having 子句中的所有總和,但到目前為止還沒有運氣,真的很感激一些幫助。
SELECT
t.CALENDAR_MONTH_NAME AS SALES_MONTH,
UPPER(LEFT(p.PROD_NAME,CHARINDEX('&',p.PROD_NAME)-1))+' '+ SUBSTRING(p.PROD_NAME,CHARINDEX('&',p.PROD_NAME),LEN(p.PROD_NAME))+' ('+CAST(p.PROD_ID AS VARCHAR)+')' AS PRODUCT_NAME,
SUM(CASE WHEN (t.DAY_NUMBER_IN_WEEK=1) THEN s.AMOUNT_SOLD END) AS Monday,
SUM(CASE WHEN (t.DAY_NUMBER_IN_WEEK=2) THEN s.AMOUNT_SOLD END) AS Tuesday,
SUM(CASE WHEN (t.DAY_NUMBER_IN_WEEK=3) THEN s.AMOUNT_SOLD END) AS Wednesday,
SUM(CASE WHEN (t.DAY_NUMBER_IN_WEEK=4) THEN s.AMOUNT_SOLD END) AS Thursday,
SUM(CASE WHEN (t.DAY_NUMBER_IN_WEEK=5) THEN s.AMOUNT_SOLD END) AS Friday,
SUM(CASE WHEN (t.DAY_NUMBER_IN_WEEK=6) THEN s.AMOUNT_SOLD END) AS Saturday,
SUM(CASE WHEN (t.DAY_NUMBER_IN_WEEK=7) THEN s.AMOUNT_SOLD END) AS Sunday
FROM sh.CUSTOMERS c
JOIN sh.SALES s ON c.CUST_ID=s.CUST_ID
JOIN sh.TIMES t ON s.TIME_ID=t.TIME_ID
JOIN sh.PRODUCTS p ON s.PROD_ID=p.PROD_ID
WHERE s.PROD_ID = 5
AND (t.CALENDAR_QUARTER_NUMBER=2 AND t.CALENDAR_YEAR=2000) AND s.AMOUNT_SOLD>0
GROUP BY p.PROD_NAME,t.CALENDAR_MONTH_NAME,t.CALENDAR_MONTH_NUMBER,p.PROD_ID
ORDER BY t.CALENDAR_MONTH_NUMBER
你能用嗎
SUM(CASE WHEN (t.DAY_NUMBER_IN_WEEK=1) THEN IFNULL(s.AMOUNT_SOLD, 0) END) AS Monday
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.