2012-02-11 5 views
1

都市のSQLサーバーコードは行と月が列になっていますが、月ごとに合計がありますが、合計がcity_idであるため、すべての合計私はそこに、city_idしてグループを定義しない場合グループはcfoutputではなくsqlコード内にあります

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

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 

と出力:出力内の都市、およびグループによってそれcity_idで、とにかくここにSQLコードであります複数行の1つの都市が表示されます。どのようにsqlコード内で値(集計)をグループ化することが可能ですか? cfoutputの中でgroupステートメントを使用する必要はありませんか?ここで

はそれをより明確にするスクリーンショットで、ここで私は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

+0

合計でありますあなたがそれを必要としない場合は、それを削除し、それが期待どおりにうまくいくはずですか、それとも何か起こっているかどうかを見るためにスクリーンショットをしてください。 –

+0

oh!:) didnt notice u invoice_monthを削除しました)それが助けになりました!ありがとうございました!プラスと正しい答えを得る! ;) – user745110

0

を定義しない場合はあなたの問題があることで定義されたgroup="city_id"

enter image description here

とスクリーンショットですグループと注文の "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

は、この1つは実際にビットを助けるでしたが、問題は解決しませんでした:( – user745110

関連する問題