0
DECLARE @Test bit= NULL
SELECT  CASE WHEN @Test = NULL THEN 
    (SELECT * FROM Sales WHERE A =1)
    ELSE
    (SELECT * FROM Sales WHERE A =2)
END

私のクエリはこれほど単純ではありませんが、これらの行にあります。プロシージャーには 7 つのパラメーターがあります。実際のストアド プロシージャでは、まず LEFT を選択して他の 3 つのテーブル (A、B、C) を結合します。2 番目の select LEFT は、前の 2 つの (A,B) テーブルと Sales 自体 (A,B,Sales) の内部結合を結合します。ユニオンを使用してみましたが、最初の選択で表示されない行が取得されます。2番目の選択は正しいものをもたらします。だから私はケース選択をすることができるかもしれないと思った. しかし、私はこのエラーで終わります

「サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです。」

続行する方法について何かアイデアはありますか? 私は何か完全に間違っていますか?さらに情報が必要な場合は、お問い合わせください。ありがとう。

4

2 に答える 2

0

おそらく、すべてをWHERE?

SELECT * 
FROM Sales 
WHERE (@Test IS NULL AND A = 1)
  OR  (@Test IS NOT NULL AND A = 2)

FROM更新:質問をもう一度読むと、さまざまな状況があるように聞こえます。その場合は次を使用しますIF

IF (@Test IS NULL)
  BEGIN
      SELECT * FROM Sales WHERE A = 1
  END
ELSE 
  BEGIN
      SELECT * FROM Sales WHERE A = 2 
  END
于 2013-09-25T19:55:42.220 に答える
0

代わりに where 句に case ステートメントを適用できます (のIS NULL代わりに使用することもできます=)。

DECLARE @Test bit
set @TEST = NULL

    SELECT * FROM Sales 
    WHERE A = 
            CASE 
                WHEN @Test IS NULL THEN 1 
                ELSE 2 
            END
于 2013-09-25T19:57:50.233 に答える