SQL使用Aggregate Total对计数进行分组

时间:2015-10-22 01:18:41

标签: sql sql-server

我现在已经在这个问题上工作了太多时间而且已经碰壁了。希望SQL大师可以帮助解决问题。

SELECT 
CATEGORY.CategoryID, CATEGORY.Category_Name, CATEGORY_SUB.CategoryID AS Expr1, 
CATEGORY_SUB.SubCategory_Name, COUNT(SELL_1.Item_SubCategory) AS Count,

(SELECT COUNT(Item_Category) AS Expr10
 FROM SELL WHERE (UserName = 'me')
 GROUP BY Item_Category) AS Expr20

FROM SELL AS SELL_1 LEFT OUTER JOIN 
CATEGORY ON 
SELL_1.Item_Category = CATEGORY.Category_Name 

LEFT OUTER JOIN CATEGORY_SUB ON 
CATEGORY.CategoryID = CATEGORY_SUB.CategoryID AND SELL_1.Item_SubCategory = CATEGORY_SUB.SubCategory_Name  WHERE (SELL_1.Seller_UserName = 'me') AND (SELL_1.Item_Removed IS NULL) AND (SELL_1.Item_Pause IS NULL) AND (SELL_1.Item_Expires > GETDATE())

GROUP BY CATEGORY.Category_Name, CATEGORY_SUB.SubCategory_Name, CATEGORY.CategoryID, CATEGORY_SUB.CategoryID
ORDER BY Count DESC

简而言之,返回的表应该是Expr20的以下列是" sum"或者例如,CategoryName的总计数的总和。

CategoryID   CategoryName   Expr1   SubCategory_Name    Count Expr20
1            CatA           200     SubCatA1            1     1
1            CatA           201     SubCatA2            2     3
1            CatA           202     SubCatA3            4     7
2            CatB           301     SubCatB1            1     1
2            CatB           302     SubCatB2            4     5
3            CatC           401     SubCatC1            3     3
3            CatC           402     SubCatC2            2     5
3            CatC           403     SubCatC3            4     9

等等。

我的问题是无论我做什么,我似乎无法让Expr20工作。 似乎问题是MS SQL想要(SELECT COUNT(Item_Category)之后的别名,因此它会抛出错误,因为返回了2列。

我正在运行MS SQL 2005.感谢任何帮助

2 个答案:

答案 0 :(得分:0)

要查看您开始使用的数据有点困难。但是,假设您拥有除Expr20之外的所有列,则可以使用outer apply或相关子查询:

select t.*, t2.Expr20
from sell t outer apply
     (select sum(count) as Expr20
      from sell t2
      where t2.CategoryId = t.CategoryId and
            t2.expr1 <= t.expr1
     ) t2;

答案 1 :(得分:0)

真的很挣这个,最后使用的可能是更优雅的解决方案,但可能更加服务器密集......我不确定我是不是SQL专家......但是想发布我的解决方案。

SELECT T1.CategoryID, Expr20, etc...
FROM
(
SELECT COUNT(Item_Category)
FROM SELL WHERE (UserName = 'me')
GROUP BY Item_Category) AS Expr20
) T1
JOIN
(
SELECT CATEGORY.CategoryID, CATEGORY.Category_Name, CATEGORY_SUB.CategoryID  AS Expr1, CATEGORY_SUB.SubCategory_Name, COUNT(SELL.Item_SubCategory) AS Count...etc as shown in the question) T2
ON T1.Item_Category = T2.Category_Name 
ORDER BY T1.Counted DESC

工作了一个款待,我得到了表格和结果我需要将类别名称分组,每行的总和数量正确。

所以诀窍是围绕2个选择进行选择,而不是尝试加入它们,因为这似乎不可能。

这是如何帮助某人并为他们节省了我昨晚经历的13小时或拔毛。

相关问题