Sql server 为什么列无效,因为它不在聚合函数或GROUPBY子句中?
我正在尝试在SQL Server中执行以下查询:Sql server 为什么列无效,因为它不在聚合函数或GROUPBY子句中?,sql-server,group-by,Sql Server,Group By,我正在尝试在SQL Server中执行以下查询: Select *, sum(Quantity) as Quantity from tblDeal where buyercode = 25 and dealdate >= '2014/04/01' and dealdate <= '2015/03/31' group by dealno order by DealDate, DealNo 实际上,tbldeal.dealid是tbldeal表中存在的多个列之一 我在互联网上搜索过
Select *, sum(Quantity) as Quantity from tblDeal where buyercode = 25
and dealdate >= '2014/04/01' and dealdate <= '2015/03/31'
group by dealno order by DealDate, DealNo
实际上,tbldeal.dealid是tbldeal表中存在的多个列之一
我在互联网上搜索过解决方案,但在大多数情况下,人们建议将列添加到group by子句或添加聚合函数。这些操作可能会消除错误,但可能会影响最终结果。我的要求是按dealno对数据进行分组。我该怎么办?请帮忙 如果使用聚合函数,则不能
选择*
,因为必须按
分组那些函数中未包含的所有内容(除非按
分组*
中包含的所有列)
删除*
并仅添加相关列,然后按分组:
SELECT DealNo,
col1,
col2,
DealDate,
SUM(Quantity) AS Quantity
FROM tblDeal
WHERE buyercode = 25
AND DealDate >= '2014/04/01'
AND DealDate <= '2015/03/31'
GROUP BY DealNo,
col1,
col2
DealDate
ORDER BY DealDate,
DealNo
假设您有两行,如下所示:
DealNo | col1 | col2 | DealDate | Quantity
1 | 0 | 1 | 2014/04/02 | 10
1 | 2 | 3 | 2014/04/02 | 10
如果您在选择col1和col2时只按DealNo进行分组,您希望SQL Server将哪些值放入col1和col2结果中?您也可以编写为:
Select *,
sum(Quantity) OVER ( PARTITION BY dealno ORDER BY dealno ASC) as Quantity
from @tblDeal where buyercode = 25
and dealdate >= '2014/04/01' and dealdate <= '2015/03/31'
--group by dealno
order by DealDate, DealNo
选择*,
作为数量的(按dealno划分的订单按dealno ASC划分的)和(数量)
来自@tblDeal,其中买方代码=25
和dealdate>='2014/04/01'和dealdate您必须根据查询中未应用聚合的所有其他列进行分组(SUM
,在您的示例中)SELECT*。
可能重复@MilenPavlov,这会影响最终结果吗?我的意思是,数据会按dealno进行分组吗?谢谢您的回答,但是我需要在select子句中包含所有列。这样,您就不能仅按dealno进行分组,否则您也必须聚合所有其他列(例如使用MAX)。我现在使用MAX函数来获得解决方案。
DealNo | col1 | col2 | DealDate | Quantity
1 | 0 | 1 | 2014/04/02 | 10
1 | 2 | 3 | 2014/04/02 | 10
Select *,
sum(Quantity) OVER ( PARTITION BY dealno ORDER BY dealno ASC) as Quantity
from @tblDeal where buyercode = 25
and dealdate >= '2014/04/01' and dealdate <= '2015/03/31'
--group by dealno
order by DealDate, DealNo