Sql Oracle选择查询以查找同一列上的组合
需要一些帮助从同一列中搜索特定组合 表值:Sql Oracle选择查询以查找同一列上的组合,sql,oracle,Sql,Oracle,需要一些帮助从同一列中搜索特定组合 表值: COLUMN1 COLUMN2 COLUMN3 WF1 Email AA WF1 Letter BB WF2 Email AA WF2 Letter BB WF2 Pen CC 如果(第1列=WF1)+(第2列=电子邮件和信函)+(第2列=信函,第3列=BB),则打印“N”: COLUMN1 COLUMN2 COLUMN3 **WF1**
COLUMN1 COLUMN2 COLUMN3
WF1 Email AA
WF1 Letter BB
WF2 Email AA
WF2 Letter BB
WF2 Pen CC
如果(第1列=WF1)+(第2列=电子邮件和信函)+(第2列=信函,第3列=BB),则打印“N”:
COLUMN1 COLUMN2 COLUMN3
**WF1** **Email** AA
**WF1** **Letter** **BB**
WF2 Email AA
WF2 Letter BB
WF2 Pen CC
我尝试了以下查询,但被卡住了:
select
case
when max(result) = 2
then
case when instrument in ('Email', 'Letter') and gem_contract_type = 'BB'
then 'N'
else 'Y'
end
else
'Y'
end
from(
select column2, column3,
count(*) over (partition by column1 order by column2) result
from
(select * from table1 where column = 'WF1')
);
如果这不是完整的答案,我希望这至少是朝着正确方向迈出的一步 首先,这将返回所有
Column1
值的列表,这些值在Column2
中同时包含Email
和Letter
:
SELECT Column1
FROM myTable
WHERE Column2 IN ('Email', 'Letter')
GROUP BY Column1
HAVING COUNT(DISTINCT Column2) = 2
您可以将其左键连接到表中,以获得我认为您想要的结果:
WITH EmAndLet AS (
SELECT Column1
FROM myTable
WHERE Column2 IN ('Email', 'Letter')
GROUP BY Column1
HAVING COUNT(DISTINCT Column2) = 2
)
SELECT
MyTable.Column1,
MyTable.Column2,
MyTable.Column3,
CASE WHEN EmAndLet.Column1 IS NOT NULL AND MyTable.Column3 = 'BB'
THEN 'N'
ELSE 'Y'
END
FROM myTable
LEFT JOIN EmAndLet ON myTable.Column1 = EmAndLet.Column1
左连接时,如果没有对应的
EmAndLet
行,则EmAndLet.Column1
将为空。如果有相应的行,EmAndLet.Column1
将有一个值,并将通过上述案例中的is NOT NULL
测试。希望这是有意义的:)你能再解释一下吗<代码>(Column2=电子邮件和信件)
,例如,是令人困惑的-它不可能两者都是,除非您查看示例中的所有行(可能按Column1
分组)。并且没有一行具有Column1=WF
@EdGibbs:我正在尝试创建一个select查询,该查询将在Column1中搜索“WF1”。那么'WF1'在第2列中有'Letter'和'Email'以及值'BB'->我应该打印'N',否则所有其他组合应该打印'Y'@SOaddict:对不起,我之前没有粘贴我的查询