私はウェブを検索しましたが、私の問題の解決策を見つけることができませんでした(しかし、間違ったキーワードを使用しています)。CASE文を使用してWHERE句に論理演算子を追加する方法はありますか? - T-SQL
私は、一連のレコードの自動検証(毎晩)を行うストアドプロシージャを持っています。ただし、ユーザーが1つのレコードに対して同じ検証を手動で実行する場合があります。元のSELECTステートメント(すべてのレコードをループする)を設定すると、指定したレコードIDを持つAND演算子を取得する必要があります。私はこのようにして、select文全体をコピーして手動部分のためだけに変更する必要がないようにしたい。
次のように、元の文は次のとおりです。
WHERE faktureerperorder = 1
で
DECLARE GenerateFacturen CURSOR LOCAL FOR
SELECT TOP 100 PERCENT becode, dtreknr, franchisebecode, franchisenemer, fakgroep, vonummer, vovolgnr, count(*) as nrVerOrd,
FaktuurEindeMaand, FaktuurEindeWeek
FROM (
SELECT becode, vonummer, vovolgnr, FaktuurEindeMaand, FaktuurEindeWeek, uitgestfaktuurdat, levdat, voomschrijving, vonetto,
faktureerperorder, dtreknr, franchisebecode, franchisenemer, fakgroep, levscandat
FROM vwOpenVerOrd WHERE [email protected] AND levdat IS NOT NULL AND fakstatus = 0
AND isAllFaktuurStukPrijsChecked = 1 AND IsAllFaktuurVrChecked = 1
AND (uitgestfaktuurdat IS NULL OR uitgestfaktuurdat<[email protected])
) sub
WHERE faktureerperorder = 1
GROUP BY becode, dtreknr, franchisebecode, franchisenemer, fakgroep, vonummer, vovolgnr,
FaktuurEindeMaand, FaktuurEindeWeek
ORDER BY MIN(levscandat)
私はこのような何かを思い付いた:
WHERE faktureerperorder = 1 AND CASE WHEN @myParameterManual = 1 THEN [email protected] ELSE 1=1 END
しかし、これは動作しません。 @myParameterManual
は、特定のレコードのみを選択する必要があるかどうかを示します。 [email protected]
はレコードのIDです。私は1=1
の設定ですべてのレコードを取得すると思った。
どのように私の目標(おそらくより効率的なアイデアやより良いアイデア)を達成するためのアイデアですか?
'どこのパーサー= 1 AND(@myParameterManual = 0 OR vonummer = @vonummer)' – Eric
[this](http://stackoverflow.com/questions/10256848/can-i-use-case-statement-in-a-join-condition/10260297#10260297)Answer help? – HABO