我需要编写一些 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 不允许。
当然,实际上这与 Pets 无关,都是与金融贷款 {Meatball Lives!} 有关,但原理是一样的。