2011-06-24 13 views
1

私が使用している別のパラメータ(@Door)に「global」を表すために使用する特殊な値が含まれているかどうかを調べるために、隠し内部パラメータ(@DoorHelper) '(' 9999 ')、その場合はすべてのドアを返します。SSRS2008 - ケースでのSELECT ... WHEN ... THEN

SELECT 
CASE 
WHEN ('9999'+'-'+ RIGHT(Unknown1,1) in (@Door)) 
THEN (SELECT DISTINCT [Zone]+' - '+CAST([OfficeID] as char(5)) FROM [ADB].[dbo].[ZoneByOffice]) 
ELSE (@Door) 
END AS ZoneID 
FROM [ADB].[dbo].[EventLog] 

問題は、THENから1つ以上の結果を返すとエラーが発生するようです。

このSQLを、私が望むように改革する方法はありますか?

+0

「@ドア」はどのように見えますか? 'IN(...)'演算子の実際の値リストとして使用しようとしているCSVリストですか? –

答えて

1

があれば、それは複数行を返すことはありません保証するために、あなたはTOP 1

SELECT 
    CASE 
     WHEN ('9999'+'-'+ RIGHT(Unknown1,1) in (@Door)) 
     THEN (SELECT TOP 1 [Zone]+ ' - '+ CAST([OfficeID] as char(5)) FROM [ADB].[dbo].[ZoneByOffice]) 
     ELSE (@Door) 
    END AS ZoneID 
FROM [ADB].[dbo].[EventLog] 

を使用するか、独自のフィールドでWHERE条件で結果セットを制限します。

+0

あなたの提案と共にDistinctを使用できますか?そして私の理解から、私がTOP1を使用すると、利用可能なすべてのもののセットではなく、同じ[ゾーン]がたくさん得られるかもしれませんか? – CodeMinion

+0

'TOP 1'はただ1つを返すので、' DISTINCT'はこの場合にはあまり意味がありません。 –

+0

@Kitler - これがあなたの望むものでない場合は、クエリのサンプル入力と予想される出力を表示してください。 –

関連する問題