我现在已经在这个问题上工作了太多时间而且已经碰壁了。希望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.感谢任何帮助
答案 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小时或拔毛。