私のテーブル:
ユーザー (userID、col1、col2)
ジェネリック ストアド プロシージャを作成したいのですが、クエリで col1 または col2 のいずれかを返す必要があります。
ケースステートメントでこの状況を処理できますか?
SELECT userID, col1 FROM ユーザー
また
SELECT userID, col2 FROM ユーザー
私のテーブル:
ユーザー (userID、col1、col2)
ジェネリック ストアド プロシージャを作成したいのですが、クエリで col1 または col2 のいずれかを返す必要があります。
ケースステートメントでこの状況を処理できますか?
SELECT userID, col1 FROM ユーザー
また
SELECT userID, col2 FROM ユーザー
ケースの使用:
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 でない最初の列の値を左から返します。
はい、同じ列名を返すことを気にしない限り:
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
SQL Server 2000/2005 はこんな感じだと思います。
select
UserID,
case UserID
when 1 then Col1
when 2 then Col2
else 'boo'
end as SpecialSituation
from
Users
col2 の代わりに col1 をいつ返すかの論理式があると仮定すると、次のようになります。
SELECT USERID CASE WHEN USERTYPE='X' THEN COL1 ELSE COL2 END FROM USERS
col1 と col2 の型が異なる場合は、CAST または CONVERT を使用して一方を他方に変換する必要があります。