在选择列表中无效,因为它不包含在聚合或Groupby子句中

时间:2016-01-03 23:11:42

标签: sql sql-server-2008

我尝试根据条件对值求和但是当我尝试查询时出现错误。

如果情况条件满足,我需要对值进行求和。我不希望执行该情况条件(求和值)。(为了激活大小写条件,我设置了一个变量(@rcntInputunit为2)和即使案例处于非活动状态(@rcntInputunit为1),查询也应该有效。

我尝试查询的代码如下所示。

   BEGIN
   DECLARE @rcntInputunit AS INT
   SET @rcntInputunit =2
   CREATE TABLE #MathLogicTable
 (
     IDNUM INTEGER IDENTITY(1,1),
     FORMULA Varchar(160),
     INPUTName varchar(160),
     AttributeValue Decimal(15,3),
     yearmonth varchar(160),
     Unit int
       )
    INSERT INTO #MathLogicTable
VALUES(
'imports(398)+imports(399)',
'imports(398)',
46,
'2003:2',
15
)

INSERT INTO #MathLogicTable
VALUES(
'imports(398)+imports(399)',
'imports(399)',
3,
'2003:1',
183
)

INSERT INTO #MathLogicTable
VALUES(
'imports(398)+imports(399)',
'imports(399)',
85,
'2003:2',
15
)

INSERT INTO #MathLogicTable
VALUES(
'imports(398)+imports(399)',
'imports(399)',
12,
'2003:1',
15
)

   INSERT INTO #MathLogicTable
   VALUES(
'imports(398)+imports(399)',
'imports(399)',
41,
'2003:2',
183
)


      INSERT INTO #MathLogicTable
      VALUES(
          'imports(398)+imports(399)',
          'imports(398)',
           12,
          '2003:1',
           183
            )

      INSERT INTO #MathLogicTable
      VALUES(
        'imports(398)+imports(399)',
        'imports(398)',
         10,
        '2003:2',
         183
              )

      INSERT INTO #MathLogicTable
      VALUES(
      'imports(398)+imports(399)',
      'imports(398)',
       5,
       '2003:1',
       15
         )

Select FORMULA,INPUTName, Case when @rcntInputunit >1 THEN sum(AttributeValue) ELSE AttributeValue END AS Value ,yearmonth 
from #MathLogicTable
GROUP BY 
FORMULA,
INPUTName,
yearmonth
END
--drop table #MathLogicTable

有人可以告诉我,我在查询中犯的错误是什么?

1 个答案:

答案 0 :(得分:2)

当您使用GROUP BY时,您的选择列表中的所有内容都必须位于GROUP BY列表中(例如FORMULAINPUTNameyearmonth)或是包含在一个聚合函数中。

在您的情况下,有一列,即AttributeValue,既未分组也未汇总。

Select
    FORMULA
,   INPUTName
,   Case when @rcntInputunit >1 THEN 
        sum(AttributeValue)
    ELSE
        AttributeValue -- <<== Here
    END AS Value
,   yearmonth 
from #MathLogicTable
GROUP BY 
    FORMULA
,   INPUTName
,   yearmonth
END

要解决此问题,您需要确定要在结果中作为Value列提供的组中的哪些项目,并在SUM内移动条件:

SUM(
    CASE when @rcntInputunit > 1 OR (you-want-this-row's AttributeValue) THEN 
        AttributeValue
    END
) AS Value