4

テーブル内の一部のデータを選択的に上書きしてから、上書きされたデータを並べ替えたりフィルタリングしたりするSQLを作成する必要があります。これは非常に単純化された例です...

私はPETと呼ばれるペットの名前でいっぱいのテーブルを持っています

PET_NAME   PET_SPECIES PET_PK
---------- ----------- -----------
Barney     Dog         {PETGUID1}
Fergus     Cat         {PETGUID2}
Meatball   Hamster     {PETGUID3}

私はLIFEと呼ばれる彼らのライフステータスを保持する別のテーブルを持っています

LIF_PK     LIF_STATUS   LIF_PET_FK
---------- ------------ ------------
{LIFGUID1} Alive        {PETGUID1}
{LIFGUID2} Alive        {PETGUID2}
{LIFGUID3} Dead         {PETGUID3}

ペットとその生活状況を報告したいと思います。

SELECT          PET_NAME,
                PET_SPECIES,
                LIF_STATUS
FROM            PET
INNER JOIN      LIFE ON LIF_PET_PK=PET_PK

ペットが死んでいるところでは、名前を報告したくなく、代わりに「DEADPET」を使用します。
思い出が多すぎます。そして、ペットの名前で注文したいと思います。

プロキシ変数を作成し、ペットが生きている場合にのみ、caseステートメントでペット名に設定できると思いました。

DECLARE      @petName nvarchar(18)
SELECT       @petName=(CASE LIF_STATUS='Alive' THEN PET_NAME ELSE 'DEADPET' END),
             PET_SPECIES,
             LIF_STATUS
FROM         PET
INNER JOIN   LIFE ON LIF_PET_PK=PET_PK
ORDER BY     @petName

しかし、それはできません。TSQLでは許可されません。

もちろん、実際にはこれはペットとは関係がなく、すべて金融ローン{Meatball Lives!}と関係がありますが、原則は同じです。

4

1 に答える 1

2

以下がうまくいくと思います(また、変数の割り当てに関するバグ修正を組み込みます):

SELECT       (CASE LIF_STATUS='Alive' THEN PET_NAME ELSE 'DEADPET' END) as `PET_NAME`
             PET_SPECIES,
             LIF_STATUS
FROM         PET
INNER JOIN   LIFE ON LIF_PET_PK=PET_PK
ORDER BY     `PET_NAME`
于 2013-03-19T11:15:56.447 に答える