1

select で集計関数と case ステートメントを使用してクエリを実行し、case ステートメントで group by を SQL Server 2005 で実行しようとしていますが、何か不足しているようです。

declare @td int
set @td = 20130731

select 
    count(*) as total,
    case
       when dateadd(s, cdm.[StartTime], '19700101') >= '2013-07-31 00:00:00.000' and dateadd(s, cdm.[StartTime], '19700101') < '2013-07-31 01:00:00.000' 
        then '0-1'
    end as timestripe
FROM 
    [EXTERNAL_CDR].[dbo].[CDRMAIN] as cdm
WHERE 
    cdm.LocalDay = @td
    AND cdm.targetnum IN ('500','600')
GROUP BY
    timestripe

このcount(*)部分は少し弱いですが、問題は group by ステートメントにあります。このクエリを実行すると、次のエラーが表示されます。

メッセージ 207、レベル 16、状態 1、行 15
列名「タイムストライプ」が無効です。

case ステートメントがエラーの根本的な原因のようですが、これを機能させるためだけにサブクエリや結合を記述する必要はありません。何か案は?

4

2 に答える 2

0

GROUP BY でエイリアスを参照することはできないため、case ステートメント全体を入れてください。「タイムストライプとして」の部分はオフのままにします。

declare @td int
set @td = 20130731

select 
    count(*) as total,
    case
       when dateadd(s, cdm.[StartTime], '19700101') >= '2013-07-31 00:00:00.000' and dateadd(s, cdm.[StartTime], '19700101') < '2013-07-31 01:00:00.000' 
        then '0-1'
    end as timestripe
FROM 
    [EXTERNAL_CDR].[dbo].[CDRMAIN] as cdm
WHERE 
    cdm.LocalDay = @td
    AND cdm.targetnum IN ('500','600')
GROUP BY
    case
       when dateadd(s, cdm.[StartTime], '19700101') >= '2013-07-31 00:00:00.000' and dateadd(s, cdm.[StartTime], '19700101') < '2013-07-31 01:00:00.000' 
        then '0-1'
    end
于 2013-08-04T00:27:04.420 に答える