一个值与其他值不同的情况,SQL Server

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)

我需要的是做一个案例

  1. pricefrom = 0然后显示null
  2. pricefrom = priceup然后显示价格
  3. 至少如果pricefrom!= priceup我想举例如:12(pricefrom) - 13(价格上涨)

但在我的查询中这一行:

在此输入图像描述

我尝试这样做,<>但在结果中出现两个数字的总和:

在此输入图像描述

我怎样才能解决这个问题?

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)

这个链接可能会有所帮助

MySQL将两列组合成一列

  • `CONCAT()`仅适用于2012+版本. (5认同)

sag*_*agi 7

您没有提供错误,但是根据您的格式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.


Gio*_*sos 6

你必须CASTVARCHAR:

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)