在SQL中执行查找计数
我想根据输入中的“是”数执行查找 在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多个输入列在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 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语句来完成结果。(但还有更好的方法吗?一种隐秘的方法吗?)对不起,我误解了这个要求。让我重新表述一下我的答案更新:更新的版本是正确的。这很好,因为它递归地解决了问题。