如何忽略要在SQL中分组的列中的不同值

时间:2014-02-26 09:33:30

标签: sql sql-server

我有一张包含我要分组的记录的表格。某些列可以包含一些不同的值,例如:

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子句中。"

3 个答案:

答案 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