TSQL-案例-中的值?
有没有一种方法可以在case语句中指定值?下面的语句不执行,因为它认为53、57、82、83等是列。。附近有工作吗。。我在谷歌上搜索了一下,但没有发现任何内容表明在表达时不能使用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
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语句对列进行别名,将最旧的作为答案: