我有这个问题,我一直在搞乱,似乎无法看到要改变什么才能收到我想要的结果。
我希望按天计算Emp_ID
的销售额,但只计算那天超过10000美元的销售额。以下是我目前的情况
SELECT
Emp_ID,
sum(SaleA+SaleB) as TotalSales,
sum(SaleA+SaleB-CommA-CommB) as TSalesAftComm,
count(Emp_ID) as NumOfSales,
SaleDate
FROM
Sales (nolock)
WHERE
SaleDate>='2014-03-15 00:00:00'
GROUP BY
SaleDate, Emp_ID
HAVING
sum(SaleA+SaleB) > 10000
ORDER BY
SaleDate
我知道在我的选择和分组依据(Emp_ID)中,它将按日期分组,并且还将分组该日期的Emp_ID。看来如果我删除SELECT和GROUP BY区域中的Emp_ID,它会将当天的所有销售额添加到10000美元以下。
以下是我得到的结果
Emp_ID | TotalSales | TSalesAftComm | NumOfSales | SaleDate
1 10897.65 10000 6 2014-03-15 00:00:00.000
1 18897.65 17800 8 2014-03-15 00:00:00.000
2 10797.65 10000 5 2014-03-15 00:00:00.000
1 10897.65 10000 6 2014-03-16 00:00:00.000
我希望将结果视为
| TotalSales | TSalesAftComm | NumOfSales | SaleDate
40592.95 37800 19 2014-03-15 00:00:00.000
10897.65 10000 6 2014-03-16 00:00:00.000
感谢您提供任何帮助或指示。
答案 0 :(得分:3)
不要使用SQL Server 2000进行测试,但 应该能够使用普通的子查询完成它,例如;
SELECT SUM(TotalSales) TotalSales, SUM(TSalesAftComm) TSalesAftComm,
SUM(NumOfSales) NumOfSales, SaleDate
FROM (
SELECT
Emp_ID,
sum(SaleA+SaleB) as TotalSales,
sum(SaleA+SaleB-CommA-CommB) as TSalesAftComm,
count(Emp_ID) as NumOfSales,
SaleDate
FROM Sales (nolock)
WHERE SaleDate>='2014-03-15 00:00:00'
GROUP BY SaleDate, Emp_ID
HAVING
sum(SaleA+SaleB) > 10000
) z
GROUP BY SaleDate
ORDER BY SaleDate
答案 1 :(得分:1)
不查看实际数据/架构,并查看您的预期结果,如果您尝试这样做会发生什么(查看分组,按TotalSales显示组;员工ID也被删除)?
SELECT
sum(SaleA+SaleB) as TotalSales,
sum(SaleA+SaleB-CommA-CommB) as TSalesAftComm,
count(Emp_ID) as NumOfSales,
SaleDate
FROM
Sales (nolock)
WHERE
SaleDate>='2014-03-15 00:00:00'
GROUP BY
TotalSales
HAVING
sum(SaleA+SaleB) > 10000
ORDER BY
SaleDate
答案 2 :(得分:1)
你说,“我希望按天Emp_ID对销售额求和,但只计算超过10000美元的销售额。以下是我目前所拥有的。”
我读到这一点,因为您只想包含超过10k的销售额。换句话说,你想要总和销售额> 10k并忽略< = 10。如果是这种情况,那么您需要删除
HAVING sum(SaleA+SaleB) > 10000
而是添加到where子句
WHERE SaleDate>='2014-03-15 00:00:00'
AND SaleA+SaleB > 10000
如果您的意思是其他内容,请编辑问题以澄清,我会再看看。