TextoÚnete a la función basada en una condición en SQL
Tratando de averiguar si es posible hacer una unión de texto como función en SQL basado en una condición. Ahora mismo la única manera en que puedo pensar en hacerlo es por ejecutar un pivote para hacer las filas de la columna y agregarlas de esa manera. Creo que esta es la única manera de transponer los datos en SQL?
Input Esta sería una tabla aql (tbl_fruit) que existe como la imagen representa
SELECT * Tbl_fruit
Producto
Pregunta hecha hace 3 años, 4 meses, 29 días - Por bytebarde61c
4 Respuestas:
-
A continuación se muestra para BigQuery Standard SQL (sin incluir específicamente cada columna, de manera que escala ...)
#standardSQL select `Group`, string_agg(split(kv, ':')[offset(0)], ', ') output from `project.dataset.table` t, unnest(split(translate(to_json_string((select as struct t.* except(`Group`))), '{}"', ''))) kv where split(kv, ':')[offset(1)] != '0' group by `Group`
Si aplicar a los datos de muestra de su pregunta - la salida es
Respondida el Dec 17, 2020 a las 17:43 - por codesculptor3f6e
Votos positivos: 0 | Votos negativos: 0 -
En Big Query, puedes hacer esto con arrays:
select grp, array_to_string( [ case when apples = 1 then 'apples' end, case when oranges = 1 then 'oranges' end, case when bananas = 1 then 'bananas' end, case when grapes = 1 then 'grapes' end ], ',' ) as output from mytable
Esto pone todas las columnas en un array, transcodificando cada
1
a la cadena literal correspondiente y0
S tonull
valores. Entonces...array_to_string()
construye la cadena CSV de salida - esta función ignoranull
valores por defecto.Respondida el Dec 17, 2020 a las 17:50 - por quantumcoder
Votos positivos: 0 | Votos negativos: 0 -
En SQL, puedes unir texto basado en una condición utilizando la función
CASE WHEN
. A continuación, te muestro un ejemplo de cómo podrías hacerlo utilizando la tablatbl_fruit
que mencionaste en tu pregunta:Supongamos que quieres unir dos columnas de texto basado en una condición. Por ejemplo, si la columna
stock
es mayor que 0, deseas concatenar la columnafruit_name
con la palabra "Disponible", de lo contrario, deseas concatenarla con la palabra "No disponible".Puedes lograr esto con la siguiente consulta SQL:
sql SELECT fruit_id, fruit_name, CASE WHEN stock > 0 THEN fruit_name || ' - Disponible' ELSE fruit_name || ' - No disponible' END AS availability FROM tbl_fruit;
En esta consulta, la función
CASE WHEN
evalúa la condiciónstock > 0
. Si la condición es verdadera, se concatena la columnafruit_name
con la palabra "Disponible". Si la condición es falsa (es decir,stock
no es mayor que 0), se concatena la columnafruit_name
con la palabra "No disponible".De esta manera, puedes unir texto basado en condiciones utilizando la función
CASE WHEN
en SQL. ¡Espero que esta respuesta te haya sido útil! Si tienes alguna otra pregunta, no dudes en decírmelo.Respondida el Dec 18, 2020 a las 17:43 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Sí, puedes hacer una unión de texto basada en una condición en SQL utilizando la función
CASE
. La funciónCASE
evalúa una expresión y devuelve un valor diferente según el resultado de la expresión.Ejemplo:
sql SELECT CASE WHEN condition1 THEN text1 WHEN condition2 THEN text2 ELSE text3 END AS joined_text FROM table_name;
En tu caso específico, puedes utilizar la función
CASE
para unir el texto de las columnasApple
,Orange
yBanana
en una sola columnaJoinedText
basada en el valor de la columnaCondition
.Consulta:
sql SELECT CASE WHEN Condition = 'Apple' THEN Apple WHEN Condition = 'Orange' THEN Orange WHEN Condition = 'Banana' THEN Banana ELSE NULL -- Maneja el caso cuando Condition no es igual a ninguno de los valores esperados END AS JoinedText FROM tbl_fruit;
Resultado:
| JoinedText | |---|---| | Apple | | Orange | | Banana |
Nota:
La función
CASE
también se puede utilizar para concatenar texto. Asegúrate de manejar los casos en los queCondition
no coincida con ninguno de los valores esperados para evitar valores nulos no deseados.Respondida el Dec 18, 2020 a las 17:53 - por Gemini
Votos positivos: 0 | Votos negativos: 0