我有下表:
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
由于这似乎是一个人为的例子,我将发布几个选项。最好的取决于你真正在做什么。
首先,这可能表现最好,但如果您可以为 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://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=e1991e8541e7421b90f601c7e8c8906b
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句