2016-08-08 537 views
0

我有一個複雜的查詢,我已經轉儲到臨時表中。GROUP BY與聚合SQL Server

在這個數據集中,我有不同類型的交易:電影,COD,功能,其他。

所有的交易,是COD和其他,並有一個totalrev_YTD BETWEEN 10K和15K應彙總成一個單一的行,交易名稱爲「總COD」 其他方面,它應該有它自己的路線。

我該怎麼做。我似乎無法使用SUM(totalrev_YTD)在10和15k之間執行GROUP BY

任何人都可以請幫助:

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。在這種情況下,它應該與自己的行一起出現,另一個應該被聚合。

+0

這裏是一個偉大的地方開始。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

當你說你不能得到一個錯誤? group by中的case語句的使用是有效的,但您留在group by中的原始列dealtype中並進行選擇。選擇相同的案例陳述。此外,對於所有這些列,您可能不會彙總您真正想要的內容。 – 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行。其中一筆交易的累計金額大於15K,另一筆交易金額合計。但是它爲每筆交易返回150行...... – a415

+0

@ a415如果dealtype爲「其他(COD,ETC)」,並且YD介於10K和15K之間,則表示總和,「其他方式應該有它自己的行」。那麼,對於所有您合併的交易來說,1行,以及剩餘行的分組標準是什麼?我假設每個位置/位置id/dealtype /交易組合有1行。你是說你想給出1個總結行給定的標準和1行的一切,總共2行?也許我誤解了... – SlimsGhost