我有下表:
ID Fruit
A apple
A banana
A grapes
B orange
B apple
B grapes
C grapes
C orange
C banana
我想添加一個名為 Apple 的新列來表示 ID 是否與蘋果相關聯:
ID Fruit Apple
A apple yes
A banana yes
A grapes yes
B orange yes
B apple yes
B grapes yes
C grapes no
C orange no
C banana no
uj5u.com熱心網友回復:
由于這似乎是一個人為的例子,我將發布幾個選項。最好的取決于你真正在做什么。
首先,這可能表現最好,但如果您可以為 JOINed 表提供多個匹配項,則存在重復行的風險。這也是我提出的唯一實際使用CASE
請求的運算式的解決方案。
SELECT a.*, case when b.ID IS NOT NULL THEN 'Yes' ELSE 'No' END AS Apple
FROM MyTable a
LEFT JOIN MyTable b on b.ID = a.ID AND b.Fruit = 'Apple'
或者,這將永遠不會重復行,但必須為每個結果行重新運行嵌套查詢。如果這不是一個人為的例子,而更像是家庭作業,這可能是預期的結果。
SELECT *, coalesce(
(
SELECT TOP 1 'Yes'
FROM MyTable b
WHERE b.ID = a.ID AND b.Fruit = 'Apple'
), 'No') As Apple
FROM MyTable a
最后,這還會為每個結果行重新運行嵌套查詢,但未來的增強功能可能會對此進行改進,并且可以為來自同一個嵌套子查詢的多個列提供值。
SELECT a.*, COALESCE(c.Apple, 'No') Apple
FROM MyTable a
OUTER APPLY (
SELECT TOP 1 'Yes' As Apple
FROM MyTable b
WHERE b.ID = a.ID AND b.Fruit = 'Apple'
) c
看到他們在這里作業:
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486981.html