什么时候出现条件1的Col1,然后('a','b')ELSE('c','d')结束

坦克危机

有一个简单的问题。这显然是无效的T-SQL语法:

SELECT Col1
FROM SomeTable
WHERE Col2 IN
    CASE WHEN someCondition THEN
        ('a', 'b')
    ELSE
        ('c', 'd')
    END

做一些真正简单的事情,例如将CASE WHEN...END括号括在括号内,添加SELECT关键字,剪切和粘贴Col2 IN到每个case处理程序中,等等,还没有很好地完成。老实说,这看起来应该可以工作,但是CASE语句可能在SQL中遇到一些尴尬的限制。

此语法有什么问题,如何解决?是否有任何真正的原因破坏了上述语法(可能导致了细微的调整,可以解决上述问题),或者这仅仅是语言设计者任意“忘了”处理的事情(可能需要一种与上述方法完全不同的方法) ?

请注意,此方法的某些应用将涉及someCondition以下形式:

(SELECT SomeCol FROM OtherTable WHERE id = n) = 'someVal'

我不确定在同一查询中复制这种子选择和比较是否容易导致它实际上在SQL中的每个位置分别被调用,但是即使它被多次调用而不重复,它仍然感觉很糟糕写两次。我想它可以运行一次并存储在一个变量中,但这也是额外的代码。

哈宝

a的结果CASE必须是单个值。

的RHSIN可以是的结果SELECT,因此您可以执行以下操作:

declare @Which as Int = 0;
select *
  from ( values ( 0 ), ( 1 ), ( 2 ), ( 3 ), ( 4 ), ( 5 ) ) as Things( Thing )
  where Thing in (
    select * from ( values ( 1 ), ( 2 ) ) as Bar( Foo ) where @Which = 0
    union
    select * from ( values ( 3 ), ( 4 ) ) as Bar( Foo ) where @Which = 1 )

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在链接列表[(a,b),(b,c),(c,d)]中的开始和结束值时对元组进行排序?

来自分类Dev

什么时候应该以“ return 0”结束C ++程序?

来自分类Dev

(a == b?c:d)是做什么的?

来自分类Dev

(a == b?c:d)是做什么的?

来自分类Dev

管道B到D?-A && B || C | d

来自分类Dev

亚马逊可用区之后的a,b,c,d,e是什么?(例如:us-east-1d)

来自分类Dev

亚马逊可用区之后的a,b,c,d,e是什么?(例如:us-east-1d)

来自分类Dev

{a,b,c}什么时候用bash扩展,什么时候不扩展?

来自分类Dev

解方程a + b + c + d = a * b * c * d

来自分类Dev

是(A-> B)/ \(C-> D)<:(A / \ C)->(B / \ D)吗?

来自分类Dev

Grails:grails什么时候结束上传?

来自分类Dev

给定A :: B :: C和(A,B,C)=> D时,如何写A :: B :: C => D?

来自分类Dev

什么时候从0循环到结束,什么时候从0循环到结束?

来自分类Dev

ab = c; 什么时候会抛出NullPointerException?其中a,b和c都是对象

来自分类Dev

PostgreSQL:在table_B的INSERT INTO table_A(col_b)中选择col_d table_B.col_c = table_A.col_a

来自分类Dev

C中的if-else条件

来自分类Dev

C中的if-else条件

来自分类Dev

等待线程结束(C ++)

来自分类Dev

线程意外结束。C ++

来自分类Dev

“ a [bc] d”(方括号)和“ a {b,c} d”(方括号)有什么区别?

来自分类Dev

PHP错误:未加括号`a?b:c?d:e`已过时。使用`(a?b:c)?d:e`或`a?b:(c?d:e)`

来自分类Dev

未加括号的`a吗?b:c?d:e`已过时。使用`(a?b:c)?d:e`或`a?b:(c?d:e)`

来自分类Dev

执行结束时出现c ++段错误

来自分类Dev

执行结束时出现c ++段错误

来自分类Dev

游戏结束条件简单的蛇 C++ 游戏

来自分类Dev

if(a,b,c,d)这是如何工作的?

来自分类Dev

如何检查以a,b,c,d等开头的单词?

来自分类Dev

拆分“a{b}c{d}”的最佳方式

来自分类Dev

使用python合并路径,从/ a / b / c + c / d到/ a / b / c / d

Related 相关文章

  1. 1

    如何在链接列表[(a,b),(b,c),(c,d)]中的开始和结束值时对元组进行排序?

  2. 2

    什么时候应该以“ return 0”结束C ++程序?

  3. 3

    (a == b?c:d)是做什么的?

  4. 4

    (a == b?c:d)是做什么的?

  5. 5

    管道B到D?-A && B || C | d

  6. 6

    亚马逊可用区之后的a,b,c,d,e是什么?(例如:us-east-1d)

  7. 7

    亚马逊可用区之后的a,b,c,d,e是什么?(例如:us-east-1d)

  8. 8

    {a,b,c}什么时候用bash扩展,什么时候不扩展?

  9. 9

    解方程a + b + c + d = a * b * c * d

  10. 10

    是(A-> B)/ \(C-> D)<:(A / \ C)->(B / \ D)吗?

  11. 11

    Grails:grails什么时候结束上传?

  12. 12

    给定A :: B :: C和(A,B,C)=> D时,如何写A :: B :: C => D?

  13. 13

    什么时候从0循环到结束,什么时候从0循环到结束?

  14. 14

    ab = c; 什么时候会抛出NullPointerException?其中a,b和c都是对象

  15. 15

    PostgreSQL:在table_B的INSERT INTO table_A(col_b)中选择col_d table_B.col_c = table_A.col_a

  16. 16

    C中的if-else条件

  17. 17

    C中的if-else条件

  18. 18

    等待线程结束(C ++)

  19. 19

    线程意外结束。C ++

  20. 20

    “ a [bc] d”(方括号)和“ a {b,c} d”(方括号)有什么区别?

  21. 21

    PHP错误:未加括号`a?b:c?d:e`已过时。使用`(a?b:c)?d:e`或`a?b:(c?d:e)`

  22. 22

    未加括号的`a吗?b:c?d:e`已过时。使用`(a?b:c)?d:e`或`a?b:(c?d:e)`

  23. 23

    执行结束时出现c ++段错误

  24. 24

    执行结束时出现c ++段错误

  25. 25

    游戏结束条件简单的蛇 C++ 游戏

  26. 26

    if(a,b,c,d)这是如何工作的?

  27. 27

    如何检查以a,b,c,d等开头的单词?

  28. 28

    拆分“a{b}c{d}”的最佳方式

  29. 29

    使用python合并路径,从/ a / b / c + c / d到/ a / b / c / d

热门标签

归档