添加列的案例语句

我有下表:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章