Случай, когда значение отличается от другого значения, 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)
но в моем запросе в этой строке:
![введите описание изображения здесь]()
Я пытаюсь сделать это с помощью <>
, но в результате появляется сумма для обоих чисел:
![введите описание изображения здесь]()
Как я могу это исправить?
Ответы
Ответ 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