2016-08-08 281 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