0

私のテーブル:

ユーザー (userID、col1、col2)

ジェネリック ストアド プロシージャを作成したいのですが、クエリで col1 または col2 のいずれかを返す必要があります。

ケースステートメントでこの状況を処理できますか?

SELECT userID, col1 FROM ユーザー

また

SELECT userID, col2 FROM ユーザー

4

4 に答える 4

3

ケースの使用:

SELECT t.userid,
       CASE
         WHEN [something to evaluate why to show col1 vs col2 ] THEN
           t.col1
         ELSE
           t.col2
       END
  FROM USERS t

COALESCE の使用:

SELECT t.userid,
       COALESCE(t.col1, t.col2)
  FROM USERS t

COALESCE は、null でない最初の列の値を左から返します。

于 2009-11-07T02:05:36.360 に答える
2

はい、同じ列名を返すことを気にしない限り:

SELECT userID, ArbitraryCol = CASE WHEN @param = 1 then col1 ELSE col2 END
FROM Users

列ヘッダーを変更する必要がある場合は、IF ステートメントを使用する必要があります。

IF @param = 1
BEGIN
SELECT userID, col1 FROM Users
END
ELSE
BEGIN
SELECT userID, col2 FROM Users
END
于 2009-11-07T02:05:46.947 に答える
1

SQL Server 2000/2005 はこんな感じだと思います。

select
   UserID,
   case UserID
      when 1 then Col1
      when 2 then Col2
      else 'boo'
   end as SpecialSituation
from
   Users
于 2009-11-07T02:06:38.410 に答える
-1

col2 の代わりに col1 をいつ返すかの論理式があると仮定すると、次のようになります。

SELECT USERID CASE WHEN USERTYPE='X' THEN COL1 ELSE COL2 END FROM USERS

col1 と col2 の型が異なる場合は、CAST または CONVERT を使用して一方を他方に変換する必要があります。

于 2009-11-07T02:06:25.000 に答える