varios valores vacio usar simbolo poner igual distinto diferente como sql sql-server case

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.

MySQL combina dos columnas en una columna

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

  1. pricefrom = 0 luego mostrar nulo
  2. pricefrom = priceup luego muestra el precio
  3. 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