我正在尝试创建一个查询,该查询按几列中的一列聚合一些数据。 (只是期待一个,但也非常有兴趣听到多种解决方案!)。
我创建了以下查询,但它不起作用。它抱怨所有列
在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
我非常有兴趣听到为什么会出现这种情况,因为在运行查询时,始终会对正确的列进行分组。显然我也对我的问题的解决方案感兴趣,但是会继续自己搞清楚。
Declare @AggregateColumn int = 1
SELECT
ResultID,
CASE
WHEN @AggregateColumn = 1 THEN Col1
WHEN @AggregateColumn = 2 THEN Col2
WHEN @AggregateColumn = 3 THEN Col3
WHEN @AggregateColumn = 4 THEN Col4
WHEN @AggregateColumn = 5 THEN Col5
ELSE 'ERROR'
END AS ResultName,
SUM(a.ResultValue) AS ResultValue
FROM
#Results
GROUP BY
ResultID,
CASE
WHEN @AggregateColumn = 1 THEN Col1
WHEN @AggregateColumn = 2 THEN Col2
WHEN @AggregateColumn = 3 THEN Col3
WHEN @AggregateColumn = 4 THEN Col4
WHEN @AggregateColumn = 5 THEN Col5
ELSE null
END
感谢您的时间。
编辑:感谢您的回复...我在问题中添加了一个额外的拼写错误。基本上我自己修复了这个问题。如果你已经完成了我上面所做的事情,SQL会返回非常无用的错误消息。即Else'ERROR'需要为null。你从来没有意识到这是问题,虽然从SQL给出的错误消息!
答案 0 :(得分:1)
通过以下方式删除组中的别名:
GROUP BY
ResultID,
CASE
WHEN @AggregateColumn = 1 THEN Col1
WHEN @AggregateColumn = 2 THEN Col2
WHEN @AggregateColumn = 3 THEN Col3
WHEN @AggregateColumn = 4 THEN Col4
WHEN @AggregateColumn = 5 THEN Col5
ELSE null
END -- AS ResultName
答案 1 :(得分:0)
基本上我自己解决了这个问题。如果你已经完成了我已经完成的工作,SQL将返回非常无用的错误消息。
即Else'ERROR'需要为null。你从来没有意识到这是问题,虽然从SQL提供的错误消息!它抱怨所有其他专栏。
Declare @AggregateColumn int = 1
SELECT
ResultID,
CASE
WHEN @AggregateColumn = 1 THEN Col1
WHEN @AggregateColumn = 2 THEN Col2
WHEN @AggregateColumn = 3 THEN Col3
WHEN @AggregateColumn = 4 THEN Col4
WHEN @AggregateColumn = 5 THEN Col5
ELSE null
END AS ResultName,
SUM(a.ResultValue) AS ResultValue
FROM
#Results
GROUP BY
ResultID,
CASE
WHEN @AggregateColumn = 1 THEN Col1
WHEN @AggregateColumn = 2 THEN Col2
WHEN @AggregateColumn = 3 THEN Col3
WHEN @AggregateColumn = 4 THEN Col4
WHEN @AggregateColumn = 5 THEN Col5
ELSE null
END