我尝试根据条件对值求和但是当我尝试查询时出现错误。
如果情况条件满足,我需要对值进行求和。我不希望执行该情况条件(求和值)。(为了激活大小写条件,我设置了一个变量(@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
有人可以告诉我,我在查询中犯的错误是什么?
答案 0 :(得分:2)
当您使用GROUP BY
时,您的选择列表中的所有内容都必须位于GROUP BY
列表中(例如FORMULA
,INPUTName
和yearmonth
)或是包含在一个聚合函数中。
在您的情况下,有一列,即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