Выполните подсчет для поиска в SQL - PullRequest
0 голосов
/ 15 октября 2019

Я хотел бы выполнить поиск, основываясь на количестве Да на входе.

В идентификаторе № 1, Output1 - это A, потому что это первое Да, Output2 - B, потому что это второе Да. В идентификаторе № 2, Выход1 пуст, потому что Вход1 не указан, последующий вывод основан на количестве появившихся Да. В идентификаторе № 3 счет пропускается, если для Input2 задано значение «Нет». (поэтому Output3 равен H)

Есть ли способ сделать рекурсивный подсчет? (Или единственный способ найти Output3 - это перечислить все 4 возможных сценария? (Пусто, из Col1, из Col2 и из Col3?)

Буду признателен, если смогу сделать это рекурсивно, потому что яиметь более 10 входных столбцов.

ID Col1 Col2 Col3 Input1 Input2 Input3 Output1 Output2 Output3
1  A    B    C    Yes    Yes    No     A       B       (null)
2  D    E    F    n/a    Yes    Yes    (null)  D       E
3  G    H    I    Yes    No     Yes    G       (null)  H

1 Ответ

2 голосов
/ 15 октября 2019

Используйте оператор CASE для вычисления вывода следующим образом:

Select id, 
Col1,
Col2,
Col3,
Input1,
Input2,
Input3,
Case when input1= 'Yes' then col1 end as output1,
Case when input2= 'Yes' then col2 end as output2,
Case when input3= 'Yes' then col3 end as output3
From your_table

- Обновление -

Попробуйте эту версию, где я использовал REGEXP_SUBSTRи CASE утверждение следующее:

SELECT
    ID,
    COL1,
    COL2,
    COL3,
    INPUT1,
    INPUT2,
    INPUT3,
    REGEXP_SUBSTR(OUTPUT, '[^,]', 1, 1) AS OUTPUT1,
    REGEXP_SUBSTR(OUTPUT, '[^,]', 1, 2) AS OUTPUT2,
    REGEXP_SUBSTR(OUTPUT, '[^,]', 1, 3) AS OUTPUT3
FROM
    (
        SELECT
            ID,
            COL1,
            COL2,
            COL3,
            INPUT1,
            INPUT2,
            INPUT3,
            CASE
                WHEN INPUT1 = 'Yes'  THEN COL1 || ','
            END
            || CASE
                WHEN INPUT2 = 'Yes'  THEN COL2 || ','
            END
            || CASE
                WHEN INPUT3 = 'Yes'  THEN COL3 || ','
            END AS OUTPUT
        FROM
            YOUR_TABLE
    );

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...