2

1つの列を合計するオプションを使用して巨大なクエリを実行する必要があります。次のようなことができるかどうか疑問に思います。

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句にも含まれていないため、選択リストでは無効です。

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) 

集計関数を group by 変数に適用できます。これは一般的に行われるわけではありませんが、問題を解決します。

于 2012-04-20T18:56:23.553 に答える
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 に答える
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 に答える