在SQL中执行查找计数

在SQL中执行查找计数,sql,oracle,Sql,Oracle,我想根据输入中的“是”数执行查找 在ID No.1中,Output1是A,因为它是第一个是,Output2是B,因为它是第二个是。 在ID No.2中,Output1为空,因为Input1为n/a,后续输出基于出现的Yes数。 在ID No.3中,当输入2不是“是”时,显示跳过计数。(因此输出3是H) 有什么方法可以进行递归计数吗?(或者找到Output3的唯一方法是列出所有4种可能的场景?(空白、从Col1开始、从Col2开始和从Col3开始?) 如果我能找到一种递归的方法,我将不胜感激,因为

我想根据输入中的“是”数执行查找

在ID No.1中,Output1是A,因为它是第一个是,Output2是B,因为它是第二个是。 在ID No.2中,Output1为空,因为Input1为n/a,后续输出基于出现的Yes数。 在ID No.3中,当输入2不是“是”时,显示跳过计数。(因此输出3是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

使用
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\u 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
    );

干杯!!

使用
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\u 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
    );

干杯!!

在我们点击字母
Z
后会发生什么?它是环绕到
AA
,还是发生了其他事情?根据Yes的出现次数,输出来自Col1/Col2/Col3/null(即没有Z或AA)在我们点击字母
Z
后会发生什么?它是环绕到
AA
,还是发生了其他事情?根据Yes的出现次数,输出来自Col1/Col2/Col3/null(即没有Z或AA)。这是不正确的。在ID2中,输出2是D,而不是e(因为input1不是Yes)。我知道我可以使用很长的案例陈述来完成结果。(但还有更好的方法吗?一种隐秘的方法吗?)对不起,我误解了这个要求。让我重新表述一下我的回答更新:更新的版本是正确的。这很好,因为它递归地解决了问题。这是不正确的。在ID2中,输出2是D,而不是E(因为input1不是Yes)。我知道我可以使用很长的Case语句来完成结果。(但还有更好的方法吗?一种隐秘的方法吗?)对不起,我误解了这个要求。让我重新表述一下我的答案更新:更新的版本是正确的。这很好,因为它递归地解决了问题。