2012-02-11 45 views
1

我有一個城市sql-server代碼行和月作爲列,有按月總和,但沒有總和由city_id,我的意思是我必須計算所有總和按城市輸出裏面,這組由city_id,反正這裏是SQL代碼:組裏面的sql代碼,而不是在cfoutput

SELECT 
    SC.CITY_ID,SC.CITY_NAME, DATEPART(MM,I.INVOICE_DATE) AS INVOICE_MONTH, 
    JAN=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=1 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
    FEB=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=2 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
    MAR=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=3 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
    APR=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=4 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
    MAY=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=5 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
    JUN=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=6 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
    JUL=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=7 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
    AUG=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=8 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
    SEP=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=9 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
    OCT=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=10 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
    NOV=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=11 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
    DEC=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=12 THEN COALESCE(NETTOTAL,0) ELSE 0 END) 
FROM 
    SETUP_CITY SC 
    LEFT OUTER JOIN COMPANY C ON C.CITY = SC.CITY_ID 
    LEFT OUTER JOIN #DSN2_ALIAS#.INVOICE I ON I.COMPANY_ID = C.COMPANY_ID AND I.INVOICE_CAT IN (50,52,53,531,532,56,58,561,54,55,51,63,48) AND I.PURCHASE_SALES = 1 
WHERE SC.COUNTRY_ID=1 
GROUP BY SC.CITY_ID,SC.CITY_NAME,I.INVOICE_DATE 
ORDER BY SC.CITY_ID,SC.CITY_NAME,I.INVOICE_DATE 

輸出:

<cfoutput query="get_top_sales_TOTAL" group="CITY_ID">

如果我不通過city_id定義組,有是多行的顯示一個城市。如何在SQL代碼中對這些值進行分組(總結)?這樣我就不必在cfoutput裏面使用組聲明瞭?

下面是截圖,使其更清晰,這裏是有定義的group="city_id"

enter image description here

截圖如果我不定義group="city_id"

enter image description here

回答

1

馬克是正確的關於invoice_month,這是沒有意義的。你的「正確」的SQL應該是

SELECT 
     SC.CITY_ID,SC.CITY_NAME, 
     TOTAL=SUM(COALESCE(NETTOTAL,0)), 
     JAN=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=1 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
     FEB=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=2 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
     MAR=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=3 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
     APR=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=4 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
     MAY=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=5 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
     JUN=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=6 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
     JUL=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=7 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
     AUG=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=8 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
     SEP=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=9 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
     OCT=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=10 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
     NOV=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=11 THEN COALESCE(NETTOTAL,0) ELSE 0 END), 
     DEC=SUM(CASE WHEN DATEPART(MM,I.INVOICE_DATE)=12 THEN COALESCE(NETTOTAL,0) ELSE 0 END) 
FROM 
     SETUP_CITY SC 
      LEFT OUTER JOIN COMPANY C ON C.CITY = SC.CITY_ID 
      LEFT OUTER JOIN #DSN2_ALIAS#.INVOICE I ON I.COMPANY_ID = C.COMPANY_ID 
        AND I.INVOICE_CAT IN (50,52,53,531,532,56,58,561,54,55,51,63,48) 
        AND I.PURCHASE_SALES = 1 
WHERE SC.COUNTRY_ID=1 
GROUP BY SC.CITY_ID, SC.CITY_NAME 
ORDER BY SC.CITY_ID,SC.CITY_NAME 
+0

謝謝你,可是,我如何使用這個總? – user745110 2012-02-13 07:59:18

+0

總數是對於一個給定的城市(所有月份/年),如果你不需要它,只要刪除它,它應該正常工作,沒有?或者只是做一個截圖,看看發生了什麼。 – 2012-02-13 10:10:39

+0

哦!:)沒有注意到你已經刪除了invoice_month)它有幫助!謝謝!得到一個正確的答案! ;) – user745110 2012-02-13 10:22:42

0

你的問題是, group by和order by中的「invoice_date」將產生多行。試試這個:

GROUP BY SC.CITY_ID, SC.CITY_NAME, DATEPART(MM,I.INVOICE_DATE) 
ORDER BY SC.CITY_ID, SC.CITY_NAME, INVOICE_MONTH 

不能試穿,所以我不能調試 - 但基本上你的小組中不能有它獨立的項目,擴大該行的唯一性(作爲「發票日期」將可能會)。祝你好運!

+0

謝謝你,這個實際上沒有幫助一點,但並沒有解決問題:( – user745110 2012-02-13 07:59:50