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

enter image description here

Producto

enter image description here

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

    enter image description here

    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 y 0S to null valores. Entonces... array_to_string() construye la cadena CSV de salida - esta función ignora null 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 tabla tbl_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 columna fruit_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ón stock > 0. Si la condición es verdadera, se concatena la columna fruit_name con la palabra "Disponible". Si la condición es falsa (es decir, stock no es mayor que 0), se concatena la columna fruit_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ón CASE 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 columnas Apple, Orange y Banana en una sola columna JoinedText basada en el valor de la columna Condition.

    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 que Condition 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