Esr*_*_92 23 sql sql-server case
我有这个表结构表prices:
CREATE TABLE prices
(
id int,
priceFrom int,
priceUp int
);
INSERT INTO prices (id, priceFrom, priceUp)
VALUES (1, 23, 23), (2, 0, 0), (3, 12, 13),
(4, 40, 40), (5, 15, 15), (6, 0, 0);
Run Code Online (Sandbox Code Playgroud)
这是结果:
我有这个问题:
select
pricefrom, priceup,
case
when pricefrom = 0 then null
when priceFrom <> priceUp then priceFrom + ' - ' + priceUp
when priceFrom = priceUp then priceFrom
end as FinalPrice
from
prices
Run Code Online (Sandbox Code Playgroud)
我需要的是做一个案例
但在我的查询中这一行:
我尝试这样做,<>但在结果中出现两个数字的总和:
我怎样才能解决这个问题?
aak*_*205 10
我想你在这里寻找concat功能.
select pricefrom, priceup,
case
when pricefrom = 0 then null
when priceFrom <> priceUp then concat(priceFrom, ' - ', priceUp)
when priceFrom = priceUp then cast(priceFrom as varchar(8))
end as FinalPrice
from prices
Run Code Online (Sandbox Code Playgroud)
这个链接可能会有所帮助
您没有提供错误,但是根据您的格式CASE EXPRESSION我假设它因转换而抛出错误.
你应该使用CAST to VARCHAR:
select pricefrom, priceup,
case
when pricefrom = 0 then ''
when priceFrom <> priceUp then CAST(priceFrom as varchar(10)) + ' - ' + CAST(priceUp as varchar(10))
when priceFrom = priceUp then CAST(priceFrom as varchar(10))
end as FinalPrice
from prices
Run Code Online (Sandbox Code Playgroud)
我不确定第一个WHEN,但你应该知道:
通常a的第一个条件CASE EXPRESSION将决定列的类型,因此,如果第一个THEN放置一个整数,这个列将是一个整数.
因为你在它中放入了null值,我不确定该列将被评估为哪种类型,所以它仍然会抛出一个错误,但你可以尝试一下:
when pricefrom = 0 then null
Run Code Online (Sandbox Code Playgroud)
注意:像@ aakashpugta.0205一样,使用CONCAT()convertion是自动的,但你应该知道CONCAT()自2012年以来只在SQL-Server上可用,因此在旧版本中无效!
我还要向你提供一篇有关的文章CASE EXPRESSION secrets.
你必须CAST到VARCHAR:
select pricefrom, priceup,
case
when pricefrom = 0 then null
when priceFrom <> priceUp then concat(cast(priceFrom as varchar(8)),
' - ',
cast(priceUp as varchar(8)))
when priceFrom = priceUp then cast(priceFrom as varchar(8))
end as FinalPrice
from prices
Run Code Online (Sandbox Code Playgroud)