2016-08-08 11 views
0

私は一時テーブルにダンプした複雑なクエリを持っています。集計SQL ServerのGROUP BY

このデータセットには、映画、COD、機能、その他のさまざまな種類の取引があります。

代金とその他の商品の合計金額が10Kと15Kのすべての取引は、取引名が「合計金額」の1行に集計されます。 それ以外の場合は、それ自身の行が必要です。

どうすればよいですか?私はGROUP BYを使っているように見えません。SUM(totalrev_YTD) 10と15kの間を使っています。

誰も助けてください:

SELECT 
    location, locationid, dealtype, 
    (CASE 
     WHEN dealtype = 'OTHER (COD, ETC)' and totalrev_YTD BETWEEN 10000 AND 15000 
      THEN 'OTHER (COD, ETC)' 
     ELSE deal 
    END) as deal, 
    rental_PW, rental_MTD, rental_QTD, rental_YTD, 
    sales_PW, sales_MTD, sales_QTD, sales_YTD, 
    otherrev_PW, otherrev_MTD, otherrev_QTD, otherrev_YTD, 
    totalrev_PW, totalrev_MTD, totalrev_QTD, totalrev_YTD 
FROM 
    #temp_rev t1 
WHERE 
    dealtype = 'OTHER (COD, ETC)' 
GROUP BY 
    (CASE 
     WHEN dealtype = 'OTHER (COD, ETC)' and totalrev_YTD BETWEEN 10000 AND 15000 
      THEN 'OTHER (COD, ETC)' 
     ELSE deal 
    END), 
    location, locationid, dealtype, 
    rental_PW, rental_MTD, rental_QTD, rental_YTD, 
    sales_PW, sales_MTD, sales_QTD, sales_YTD, 
    otherrev_PW, otherrev_MTD, otherrev_QTD, otherrev_YTD, 
    totalrev_PW, totalrev_MTD, totalrev_QTD, totalrev_YTD 

この例は、私が10 COD、他の取引を持っているだろう。この取引の1つにtotalrev_YTD> 15Kがあります。この場合は、それ自身の行と一緒に表示され、もう1つは集約されるべきです。

+0

は、開始するには絶好の場所です。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

エラーが表示されない場合はどうすればいいですか? group byのcaseステートメントの使用は有効ですが、元の列のdealtypeをgroup byおよびselectで残しておきます。同じcase文をselectに入れる必要があります。また、これらの列のすべてを使用して、実際にどのようにしたいかを集計しているとは限りません。 – Matt

答えて

0

私はあなたのGROUP BYが良いと思っています。列数が少なくて済むようにしておき、合計する必要があるすべての数値を(SUMで)集計します。

"シングルライン"の取引の場合、クエリはその行を合計しますが、これは完全に正常です。

例:ここでは

SELECT location, locationid, dealtype 
, (CASE WHEN dealtype = 'OTHER (COD, ETC)' and totalrev_YTD BETWEEN 10000 AND 15000 THEN 'OTHER (COD, ETC)' 
    ELSE deal 
    END 
) as deal, 
sum(rental_PW) as rental_PW, 
sum(rental_MTD) as rental_MTD, 
..., -- insert other summed columns here 
sum(totalrev_YTD) as totalrev_YTD 

FROM #temp_rev t1 
WHERE dealtype ='OTHER (COD, ETC)' 

GROUP BY 
(CASE WHEN dealtype = 'OTHER (COD, ETC)' and totalrev_YTD BETWEEN 10000 AND 15000 THEN 'OTHER (COD, ETC)' 
    ELSE deal 
    END 
) , 
location, locationid, dealtype 
+0

動作していないようです。 2行しか返しません。 1件の取引ではtotalrev_YTD> 15K、もう1行には他のすべての合計が含まれています。しかし、取引ごとに150行を返します... – a415

+0

@ a415取引タイプが「OTHER(COD、ETC)」で、10Kか​​ら15Kの間のYTDと合計した場合、「他の賢明なのはそれが自分のラインであるべき」と言いました。だから、一列に並んでいるすべての取引について1行、残りの行のグループ化基準は何ですか?私は、location/locationid/dealtype/dealの組み合わせごとに1行を仮定しました。あなたは、指定された基準のための1行の要約と、それ以外のもののための1行、合計2行が必要だと言っていますか?たぶん私は誤解している... – SlimsGhost