我有一张包含我要分组的记录的表格。某些列可以包含一些不同的值,例如:
ID --- --- PRODUCT AMOUNT
1 ---- --------糖果23.44
1 ---- -------- CAND 14.42
1 ---- CAND --------- 8.18
我想按ID对记录进行分组并总结金额,最后我想忽略该产品,只是说我想使用第一个值。
这是我的SQL语句。
SELECT [ID]
,[PRODUCT]
,sum([AMOUNT]) AMOUNT
FROM [TABLE]
GROUP BY [ID], [PRODUCT]
如果我没有在我的小组中写下[PRODUCT],我会收到此错误:
"专栏'产品'在选择列表中无效,因为它不是 包含在聚合函数或GROUP BY子句中。"
答案 0 :(得分:4)
您需要汇总group by
子句中不存在的所有列。您可以使用min()
来获得按字母顺序排列的最小
SELECT [ID]
,min([PRODUCT]) PRODUCT
,sum([AMOUNT]) AMOUNT
FROM [TABLE]
GROUP BY [ID]
或完全删除product
SELECT [ID], sum([AMOUNT]) AMOUNT
FROM [TABLE]
GROUP BY [ID]
答案 1 :(得分:0)
当您使用group by时,select子句中的每一列必须通过Aggregate函数(如MAX,MIN,AVG,...)定义,或者必须包含在group by子句中。
解决方案:
将SELECT子句中的所有列添加到GROUP BY子句中,或从SELECT子句中删除导致问题的列。
答案 2 :(得分:0)
这应该有效 创建表Table1 ([ID] int,[PRODUCT] varchar(6),[AMOUNT] numeric);
INSERT INTO Table1
([ID], [PRODUCT], [AMOUNT])
VALUES
(1, 'Candy', 23.44),
(1, 'CAND', 14.42),
(1, 'CAND', 8.18);
select *, (select top 1 PRODUCT from Table1 T1 where t.ID=t1.id) Product
from (SELECT [ID]
,sum([AMOUNT]) AMOUNT
FROM [TABLE1]
GROUP BY [ID])T