2

我需要使用汇总一列的选项运行一个巨大的查询。我想知道是否可以执行以下操作:

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

现在我收到一个错误:Msg 8120, Level 16, State 1, Line 4 列 'Visits.Time' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。

4

3 回答 3

2

我认为您可以执行以下操作:

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) 

您可以将聚合函数应用于按变量分组。这通常不这样做,但它可以解决您的问题。

于 2012-04-20T18:56:23.553 回答
0

我还没有测试过,但这应该可以正常工作:

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]
于 2012-04-20T17:20:37.427 回答
0

我想你可以采用动态 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
于 2012-04-20T17:34:35.540 回答