vacio - sql diferente de varios valores
Caso cuando un valor es diferente a otro valor, SQL Server (4)
Creo que estás buscando la función concat aquí.
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
Este enlace probablemente será de ayuda.
Tengo esta estructura de tabla para prices
mesa:
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);
Este es el resultado:
Tengo esta consulta:
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
Lo que necesito es hacer un caso cuando
- pricefrom = 0 luego mostrar nulo
- pricefrom = priceup luego muestra el precio
- Al menos si pricefrom! = Priceup quiero mostrar, por ejemplo, esto: 12 (pricefrom) - 13 (priceup)
pero en mi consulta en esta línea:
Intento hacer esto con <>
pero en el resultado aparece la suma para ambos números:
¿Cómo puedo arreglar esto?
Debe convertir los campos de precios como una cadena para que SQL entienda que no quiere tratarlos como números y realizar una operación matemática:
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
No proporcionó el error, pero según el formato de su CASE EXPRESSION
que está generando un error debido a la conversión.
Debes utilizar 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
No estoy seguro del primer WHEN
, pero debes saber que:
por lo general, la primera condición de una CASE EXPRESSION
determinará el tipo de columna, por lo tanto, si la primera THEN
coloca un número entero, esta columna será un número entero.
ya que le está poniendo un valor nulo, no estoy seguro de a qué tipo de columna se evaluará, por lo que aún puede generar un error, pero puede intentarlo:
when pricefrom = 0 then null
Nota: Al igual que @ aakashpugta.0205 responda, utilizando CONCAT()
la conversión es automática, pero debe saber que CONCAT()
está disponible en SQL-Server solo desde 2012, por lo que en versiones anteriores no funcionará.
Permítame también referirme a un artículo interesante sobre los CASE EXPRESSION secrets
.
Tienes que CAST
a 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