带有可选聚合和组的SQL查询可能吗?
我需要运行一个巨大的查询,总结一列的选项。我想知道是否有可能做一些这样的:带有可选聚合和组的SQL查询可能吗?
declare @sumIt bit
set @sumIt = 1
select ID, Name, CASE WHEN @sumIt=1 THEN sum(Time) ELSE Time END [timeCol]
from Visits
where ID = 123
Group by ID, Name, CASE WHEN @sumIt=1 THEN '' ELSE Time END
现在我得到一个错误: 消息8120,级别16,状态1,行4列 “Visits.Time”被在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
我认为你可以做到以下几点:
declare @sumIt bit
set @sumIt = 1
select ID, Name,
(CASE WHEN @sumIt=1 THEN sum(Time) ELSE min(Time) END) [timeCol]
from Visits
where ID = 123
Group by ID, Name, (CASE WHEN @sumIt=1 THEN '' ELSE Time END)
您可以通过变量应用聚合函数的组。这不常用,但它解决了你的问题。
我没有测试过,但是这个应该很好地工作:
select ID, Name, sum([Time]) [timeCol]
from Visits
where ID = 123
AND @sumint = 1
Group by ID, Name
UNION ALL
select ID, Name, [Time] [timeCol]
from Visits
where ID = 123
AND @sumint = 0
Group by ID, Name, [Time]
我认为问题在于他不想维护两次巨大的查询。这并没有真正解决它,但老实说,我想不出一个更好的方法。 – climbage 2012-04-20 17:24:46
我想你可以把动态SQL方法。不是疯了一下我自己,我只是使用IF
declare @sumIt bit, @sql VARCHAR(1000)
set @sumIt = 0
SET @sql = 'select ID, Name, ' + CASE WHEN @sumIt=1 THEN 'sum(Time)' ELSE 'Time' END + ' [timeCol]
from Visits
where ID = 123
Group by ID, Name' + CASE WHEN @sumIt=1 THEN '' ELSE ',Time' END
EXEC @sql
我会在任何一天选择通过字符串连接SQL的两个单独的查询。 – HardCode 2012-04-20 19:13:09
访问中您的唯一标识符是什么? – 2012-04-20 18:01:39
@JohnDewey - 在这个查询中,我的唯一标识符不被检索 – lauh 2012-04-20 19:11:31