我需要编写一些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”。
记忆太多了。
然后我想通过宠物名称订购。
我以为我可以创建一个代理变量,然后将其设置为一个宠物名称 只有在宠物还活着的情况下,例如。
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不会允许它。
实际上,这与宠物无关,而且与金融贷款有关{肉丸生活!} 但原则是一样的。
答案 0 :(得分: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`