私はSQLにかなり不慣れです。SQLServer2012を使用しています。
基本的に、SQL SELECTステートメントのWHERE句は、ストアドプロシージャに渡される特定のパラメータの値に応じて調整する必要があります。
また、このSELECTの結果をストアドプロシージャ内の別のSELECTステートメントと統合します。
これまでの構造は次のとおりです。
CREATE PROCEDURE dbo.procMyProcedure
@Param1 smallint = null
, @Param2 int = null
, ...
AS ...
--I have three separate SELECT statements, each catering for a specific scenario
SELECT ...
FROM ...
WHERE
(ER.EMR_Number = ISNULL(@Param1, ER.EMR_Number)) AND
(EE.EME_Number = ISNULL(@Param2, EE.EME_Number))
SELECT ...
FROM ...
WHERE
(EE.EME_Number = ISNULL(@Param2, EE.EME_Number))
SELECT ...
FROM ...
WHERE
(ER.EMR_Number = ISNULL(@Param1, ER.EMR_Number))
WHERE句を除いて、ステートメントは同じです。私のシナリオでは、最初のステートメントは正確に1つの結果を返します。2番目は119の結果を返します。3番目は3つの結果を返します。
3つのステートメントすべてを実行したくありません。渡された(オプションの)パラメーターの値に応じて、それらを1つのステートメントにマージし、その1つのステートメントが上記の3つのステートメントと同じ結果を返すようにします。
SELECTをネストされたIF...ELSE IF構造でラップすることでこれを行うことができますが、UNIONを使用できません。次の構造は機能しません。
IF ...
SELECT ...
ELSE IF ...
SELECT ...
ELSE IF ...
SELECT ...
UNION
SELECT ...
UNIONステートメントの一部として使用できるように、これらを単一のSELECTステートメントにマージする方法が必要です。
私は次のことを知りたい:
SELECT ... --This select
UNION
SELECT ... --Other stuff
私はこれでどんな助けにも本当に感謝します。
よろしく、
アダム。