代码之家  ›  专栏  ›  技术社区  ›  Broken Link

tsql-case-values in?

  •  9
  • Broken Link  · 技术社区  · 15 年前

    我们是否可以为case语句指定值?以下语句不执行,因为它认为53、57、82、83等是列。附近有工作吗……我在谷歌上搜索了一下,但没发现有什么能说明你在表达时不能用的。

    select 
    x =
    case 
        when xvalue in ([52],[57],[82],[83]) 
            then "xvalue"
        when yvalue in ([01],[02],[11]) 
            then "yvalue"
        else
            'NULL'
        end
    from xyztable
    
    6 回复  |  直到 15 年前
        1
  •  16
  •   user121301    15 年前

    不要在数字周围加括号。

        2
  •  12
  •   OMG Ponies    15 年前

    用途:

    SELECT x = CASE 
                 WHEN t.xvalue IN (52, 57, 82, 83) THEN 'xvalue'
                 WHEN t.yvalue IN (01, 02, 11) THEN 'yvalue'
                 ELSE NULL
               END
      FROM TABLE t
    

    假设需要列中的值,请使用:

    SELECT x = CASE 
                 WHEN t.xvalue IN (52, 57, 82, 83) THEN t.xvalue
                 WHEN t.yvalue IN (01, 02, 11) THEN t.yvalue
                 ELSE NULL
               END
      FROM TABLE t
    

    您知道如果XValue和YValue都在组中,那么只会显示XValue吗?

        3
  •  3
  •   Ben Hoffman    15 年前

    试试这个:

    select 
    case 
        when xvalue in (52,57,82,83) 
            then "xvalue"
        when yvalue in (01,02,11) 
            then "yvalue"
        else
            'NULL'
        end as 'x'
    

    如果您想使用x,我假设它是一个变量,那么您需要这样定义它:

    声明@ x int

    select 
    @x = case 
        when xvalue in (52,57,82,83) 
            then "xvalue"
        when yvalue in (01,02,11) 
            then "yvalue"
        else
            'NULL'
        end
    
        4
  •  2
  •   Gabriel McAdams    15 年前

    您的查询不起作用的原因是它写得不正确。看看这个:

    in ([01],[02],[11])  
    

    将[]放在值周围意味着您希望它们被视为列名。如果删除引号,则该部分将起作用。另请看这个:

    then "xvalue" 
    

    这里需要单引号。

    else 'NULL'
    

    在这里,您希望值为空还是字符串“空”?按照您编写它的方式,它将是字符串“null”

    要使其为空值,请这样编写:

    else NULL
    

    以下是全部内容,写得正确:

    select    
    x =   
    case    
        when xvalue in (52,57,82,83)    
            then 'xvalue'
        when yvalue in (01,02,11)    
            then 'yvalue'
        else 'NULL'   
        end   
    from xyztable
    
        5
  •  1
  •   Mike Mooney    15 年前

    当然,如果xvalue是一个数字列,只需去掉括号即可。那它就可以工作了。括号告诉数据库服务器某个对象是数据库对象,所以移除它们,使它们被视为文本。

        6
  •  1
  •   ConcernedOfTunbridgeWells    15 年前

    关于T-SQL [] 标识符用于引用诸如列名之类的符号——如果您真的想,可以在列名中使用空格和各种奇数字符。使用 '' 引用字符串文本。