0

結果の数に基づいて、2 つの選択ステートメントから選択しようとしています。次の case ステートメント以外でテストすると、各ステートメントは有効なデータを返します。

SELECT CASE 
         WHEN Count(base.id) > 0 THEN base.id 
         ELSE (SELECT id 
               FROM   tablea 
               WHERE  pid = @val) 
       END 
FROM   (SELECT id 
        FROM   tablea 
        WHERE  id = @val) AS base 

base.Id >0 の場合は正しく返されます。それ以外の場合は Null で、代わりにテーブルから 7 行が必要です。

4

2 に答える 2

4

WHEN COUNT(base.id) >0FROMid <>@val の行を除外するため、常に true です。あなたが望むものを誤解していない限り、次のようにすると望ましい結果が得られます。

SELECT id               
FROM   tablea 
WHERE  id = @val OR pid = @val

アップデート :

SELECT id               
FROM   tablea 
WHERE  id = @val OR (pid = @val 
AND NOT EXISTS (SELECT NULL FROM tablea WHERE id = @val))
于 2013-01-07T18:24:30.290 に答える
1

行の 1 つのセットを選択するか、失敗した場合は 2 番目のセットを選択したいようです。1 つの方法はunion、2 つのセットを使用して、必要なものを選択することです。

select id from (
  select id, 1 as Selector
    from tablea
    where id = @val
  union
  select id, 2
    from tablea
    where pid = @val ) as Placeholder
  where Selector = case when exists ( select 42 from tablea where id = @val ) then 1 else 2 end

idnullableではないと仮定しました。

于 2013-01-07T18:29:48.810 に答える