いくつかのデータをクエリする必要があります。これが私が作成したクエリですが、これは私にとってはうまく機能しません。この例では、AdventureWorksデータベースを使用しています。
SELECT * FROM [Purchasing].[Vendor] WHERE PurchasingWebServiceURL LIKE
case
// In this case I need all rows to be returned if @url is '' or 'ALL' or NULL
when (@url IS null OR @url = '' OR @url = 'ALL') then ('''%'' AND PurchasingWebServiceURL IS NULL')
//I need all records which are blank here including nulls
when (@url = 'blank') then (''''' AND PurchasingWebServiceURL IS NULL' )
//n this condition I need all record which are not like a particular value
when (@url = 'fail') then ('''%'' AND PurchasingWebServiceURL NOT LIKE ''%treyresearch%''' )
//Else Match the records which are `LIKE` the input value
else '%' + @url + '%'
end
これは私にはうまくいきません。同じTHEN
のCASE
に複数のwhere条件句を含めるにはどうすればよいですか?どうすればこれを機能させることができますか?
アマダンに基づく別の方法:
SELECT * FROM [Purchasing].[Vendor] WHERE
( (@url IS null OR @url = '' OR @url = 'ALL') and PurchasingWebServiceURL LIKE '%')
or
( @url = 'blank' and PurchasingWebServiceURL = '')
or
(@url = 'fail' and PurchasingWebServiceURL NOT LIKE '%treyresearch%')
or( (@url not in ('fail','blank','','ALL') and @url is not null and
PurchasingWebServiceUrl Like '%'+@ur+'%')
END
カットアンドペーストではありません。 CASE
式は値を返す必要があり、SQLを含む文字列を返します(技術的には値ですが、型が間違っています)。これはあなたが書きたかったものだと私は思います:
SELECT * FROM [Purchasing].[Vendor] WHERE
CASE
WHEN @url IS null OR @url = '' OR @url = 'ALL'
THEN PurchasingWebServiceURL LIKE '%'
WHEN @url = 'blank'
THEN PurchasingWebServiceURL = ''
WHEN @url = 'fail'
THEN PurchasingWebServiceURL NOT LIKE '%treyresearch%'
ELSE PurchasingWebServiceURL = '%' + @url + '%'
END
また、これは一部の方言では機能しない可能性があると思いますが、ブール値がないため、現在テストできません(Oracle、私はあなたを見ています)。
ただし、@url
はテーブルの値に依存しません。なぜ、3つの異なるクエリを作成し、パラメータに基づいて評価するものを選択しませんか?