Подтвердить что ты не робот

Случай, когда значение отличается от другого значения, SQL Server

У меня есть эта структура таблицы для таблицы 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);

Это результат:

введите описание изображения здесь

У меня есть этот запрос:

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

мне нужно сделать случай, когда

  • pricefrom = 0, затем показать null
  • pricefrom = priceup, а затем показать цену
  • По крайней мере, если pricefrom!= priceup, я хочу показать, например, следующее: 12 (pricefrom) - 13 (priceup)

но в моем запросе в этой строке:

введите описание изображения здесь

Я пытаюсь сделать это с помощью <>, но в результате появляется сумма для обоих чисел:

введите описание изображения здесь

Как я могу это исправить?

4b9b3361

Ответ 1

Я думаю, что вы ищете здесь 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

Эта ссылка, вероятно, будет полезна

MySQL объединяет два столбца в один столбец

Ответ 2

Вы не указали эту ошибку, но в формате вашего 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

Я не уверен в первом WHEN, но вы должны знать, что:

обычно первое условие CASE EXPRESSION будет определять тип столбца, поэтому, если первый THEN помещает целое число, этот столбец будет целым числом.

поскольку вы помещаете в него нулевое значение, я не уверен, к какому типу будет оцениваться столбец, поэтому он все равно может выдать ошибку, но вы можете попробовать:

           when pricefrom = 0 then null

Примечание: Как и @aakashpugta.0205 ответ, используя CONCAT(), конвертация является автоматической, но вы должны знать, что CONCAT() доступен на SQL-сервере только с 2012 года, поэтому в старых версиях это не сработает!

Позвольте мне также рассказать вам о интересной статье о CASE EXPRESSION secrets.

Ответ 3

Вы должны 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

Ответ 4

Вы должны указать поля цены как строку, чтобы SQL понимал, что вы не хотите рассматривать их как числа и выполнять математическую операцию:

select pricefrom, priceup,
case
when pricefrom = 0 then null
when priceFrom <> priceUp then cast(priceFrom as varchar) + ' - ' + cast(priceUp as varchar)
when priceFrom = priceUp then priceFrom
end as FinalPrice
from prices