0

SQL の select ステートメントで次のコードを再利用することについて質問があります。このステートメントの変数を宣言できるのだろうか

CASE
    WHEN ssr.rating = 'A' OR ssr.rating LIKE 'A[+-]'
    THEN 1

    WHEN ssr.rating = 'AA' OR ssr.rating LIKE 'AA[+-]'
    THEN 2

    WHEN ssr.rating = 'BBB' OR ssr.rating LIKE 'BBB[+-]'
    THEN 3

    ELSE 0
END
4

3 に答える 3

4

共通のテーブル式を使用して列を追加できる場合があるため、後でクエリで複数の場所で使用できます。

WITH cte AS (
  SELECT *,
  CASE
    WHEN ssr.rating = 'A' OR ssr.rating LIKE 'A[+-]'     THEN 1
    WHEN ssr.rating = 'AA' OR ssr.rating LIKE 'AA[+-]'   THEN 2
    WHEN ssr.rating = 'BBB' OR ssr.rating LIKE 'BBB[+-]' THEN 3
    ELSE 0
  END value
  FROM ssr
)
SELECT * FROM cte;

次に、クエリcteの代わりに使用ssrして、常に値列を追加できます。たとえば、;

SELECT * 
FROM cte 
WHERE value=1 OR value=2;

...それ以外の場合は、比較ごとにケースを使用します。

でテストする SQLfiddle

于 2013-05-16T18:05:30.867 に答える
2

UDF よりも簡単ですか? 私はあなたが何を意味するのか分かりません、それはかなり簡単です...

CREATE FUNCTION RatingToNumber(@rating nvarchar(10)) RETURNS int AS 
BEGIN
RETURN CASE
    WHEN @rating = 'A' OR @rating LIKE 'A[+-]'     THEN 1
    WHEN @rating = 'AA' OR @rating LIKE 'AA[+-]'   THEN 2
    WHEN @rating = 'BBB' OR @rating LIKE 'BBB[+-]' THEN 3
    ELSE 0
  END 
 END

そして、あなたはそれをそのように使うことができます...

SELECT dbo.RatingToNumber('A')
于 2013-05-16T18:41:33.553 に答える
1

ストアド プロシージャ内の複数の場所でこのケース式の出力値が必要な場合は、絶対に必要です。(SQL Server と Oracle のどちらについて話しているのでしょうか?)

残念ながら、SQL ステートメント内の複数の場所でそれを再利用しようとしているのであれば、いいえ、T-SQL/P-SQL 変数ではそれを行うことはできません。SQL ステートメント内の複数の場所で case 式の値を再利用するには、その case ステートメントの値を出力するユーザー定義関数を定義して作成する必要があります。

于 2013-05-16T17:20:48.910 に答える