簡體   English   中英

過濾多個聚合列

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

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