0

名前の付いたテーブルがcourseあり、2 つの列topicstatus..

テーブルには 3 つの行があります。

('Computer','A')
('Science','I')
('History','A')

Active表示したいテーブルの値を表示するときA..InactiveどうIすればそれを行うことができますか...ここで私を助けてください.

4

5 に答える 5

2

他の答えはすべて、クエリの正しいアプローチを指摘しています。この答えは、これをテーブルに直接「焼き付ける」方法を説明することです。つまり、'A''I'をフィールドに格納できますが、 と を取得'Active'できます'Inactive'

このために、テーブルの列の名前を「_status」に変更します。

最初の方法は、ビューを使用することです。

create view vw_table as 
    select <other columns>,
           (case when _status = 'A' then 'Active'
                 when _status = 'I' then 'Inactive'
            end) as status
    from t;

次に、アプリケーション コードは常にビューを使用し、ステータスが必要なものであることが保証されます。SQL Server では、テーブル定義に計算列を追加することもできます。

alter table
    add column status as (case when _status = 'A' then 'Active'
                               when _status = 'I' then 'Inactive'
                          end);

ビューまたは計算列を使用する利点は、つづりと定義が常に同じであることです。

最後に、そのような文字列を参照テーブルに変換したいことがよくあります。その場合、実際statusIDには元のテーブルにあり、statusテーブルには実際の定義があります。明確な定義を持つバイナリ値の場合、これはやり過ぎかもしれません。一方、SQL を学習している場合は、参照テーブルの作成 (およびデータ構造のさらなる正規化) について学習する良い機会になるかもしれません。

于 2013-08-11T14:52:44.487 に答える
2
SELECT topic, 
       CASE status                     
         WHEN  'A' THEN 'Active'
         WHEN  'I' THEN 'Inactive'
       END
FROM course 
WHERE condition;

一般的なcaseステートメント構文用。

于 2013-08-11T14:41:10.470 に答える
1
SELECT Topic, 
    CASE Status  
        WHEN 'A' THEN 'Active' 
        WHEN 'I' THEN 'Inactive' 
        -- ELSE '' -- only if you need it
    END AS [Status]
FROM course 
于 2013-08-11T14:41:30.577 に答える