Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle选择查询以查找同一列上的组合_Sql_Oracle - Fatal编程技术网

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:对不起,我之前没有粘贴我的查询