2

以下のテーブル構造に基づいて、出力にステータス コードを表示するにはどうすればよいですか?

テーブル名:

リクエスト

列:

RequestID,RequestMessage,RequestStatusID,RequestPriorityID

,

RequestStatusID が次のように変換されると仮定します。

1 = IN_PROGRESS, 2 = CANCELED, 3 = COMPLETED

レコードのために、リクエストステータスを保持するために新しいテーブルを作成することは許可されていません。どういうわけかselectステートメントにそれらを含める必要があり、selectステートメントでリクエストステータスコードがハードコーディングされているかどうかは問題ではありません。

追加のテーブルを使用せずにこれを達成する別の方法があるかどうかを知りたいだけです。

4

4 に答える 4

4

ケース ステートメント:

SELECT RequestID,
       CASE RequestStatusID 
       WHEN 1 THEN 'IN_PROGRESS'
       WHEN 2 THEN 'CANCELED'
       WHEN 3 THEN 'COMPLETED'
       END,
       RequestDesc,
       RequestPriorityID
 FROM #Request

または、SQL Server 2012 を使用している場合は CHOOSE() 関数:

SELECT RequestID,
       CHOOSE(RequestStatusID,'IN_PROGRESS','CANCELED','COMPLETED'),
       RequestDesc,
       RequestPriorityID
 FROM #Request
于 2013-10-15T07:55:14.133 に答える
0

を使用できますcaseが、実際には派生テーブルのアイデアが好きです。将来変更するのが簡単だからです。

select
    R.*, C.Name as RequestStatusName
from Request as R
    left outer join (values
         (1, 'IN_PROGRESS'),
         (2, 'CANCELED'),
         (3, 'COMPLETED')
    ) as C(Id, Name) on C.Id = R.RequestStatusID 

したがって、次のように、必要な数の列を追加できます。

select
    R.*,
    C.Name as RequestStatusName,
    C.Description as RequestStatusDescription
from Request as R
    left outer join (values
         (1, 'IN_PROGRESS', 'In progress description'),
         (2, 'CANCELED', 'Canceled description'),
         (3, 'COMPLETED', 'Completed description')
    ) as C(Id, Name, Description) on C.Id = R.RequestStatusID 

頻繁に参加する必要がある場合は、ビューを作成できます。

create view vw_RequestStatusNames
as
    select C.Id, C.Name, C.Description
    from (values
         (1, 'IN_PROGRESS', 'In progress description'),
         (2, 'CANCELED', 'Canceled description'),
         (3, 'COMPLETED', 'Completed description')
    ) as C(Id, Name, Description)

結合で使用します。

select
    R.*,
    C.Name as RequestStatusName,
    C.Description as RequestStatusDescription
from Request as R
    left outer join vw_RequestStatusNames as C on C.Id = R.RequestStatusID 

=> SQL FIDDLE デモ

于 2013-10-15T07:55:53.213 に答える