Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL-案例-中的值?_Sql_Sql Server_Tsql - Fatal编程技术网

TSQL-案例-中的值?

TSQL-案例-中的值?,sql,sql-server,tsql,Sql,Sql Server,Tsql,有没有一种方法可以在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 'N

有没有一种方法可以在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

不要用括号括起数字。

试试这个:

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是一个变量,你会想这样定义它:

else NULL
声明@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
使用:

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

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?

当然,如果xvalue是数字列,只需删除括号即可。那么它应该可以正常工作。括号告诉数据库服务器某个东西是数据库对象,因此请将其删除,以便将其视为文字。

在t-sql中,[]标识符用于引用诸如列名之类的符号-如果确实需要,可以在列名中使用空格和各种奇数字符。使用引号引用字符串文字

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

in ([01],[02],[11])  
then "xvalue" 
将[]放在值周围意味着您希望将它们视为列名。如果删除引号,则该部分将正常工作。再看看这个:

in ([01],[02],[11])  
then "xvalue" 
这里需要单引号

else 'NULL'
这里,您希望值为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

@Random:X=与'as X`@Gabriel相同,如果您以后想在t-sql中使用它,则不会使用它。。。x=和as x将用该名称命名相应的列,同时声明变量允许您从同一个t-sql块中直接访问它…这就是我所说的。x=和'as x'都做相同的事情。我只是指出,没有理由相信OP想要使用变量。在我看来,海报只想使用别名,在这种情况下,x=与'as x'相同。是针对哪个版本的SQL Server,还是针对Sybase?我使用括号的原因是。。在数据透视表中使用相同数据透视表时。。MSDN告诉我这样使用。。选择“AverageCost”作为成本,按生产天数排序,[0]、[1]、[2]、[3]、[4],从选择DayToManufacture、标准生产成本中选择“AverageCost”。将产品作为源表透视,将DayToManufacture的标准成本作为数据透视表,在[0]、[1]、[2]、[3]、[4]作为数据透视表;这有点旧,但是…您在透视表中使用括号,因为您实际上是在使用IN语句对列进行别名,将最旧的作为答案: