oracle 具有2个特定事件的格尔行

4urapxun  于 2023-01-16  发布在  Oracle
关注(0)|答案(1)|浏览(159)

| 色谱柱_A|色谱柱_B|
| - ------|- ------|
| 1个|十|
| 1个|Z型|
| 第二章|十|
| 第二章|是|
| 三个|是|
| 四个|十|
| 四个|是|
| 四个|Z型|
| 五个|是|
我想获取列A的所有非重复值,其中一行的列B等于X,另一行的列B等于"Y"
结果会是这样的:
| 色谱柱_A|
| - ------|
| 1个|
| 四个|
我试着这样说:

SELECT DISTINCT COLUMN_A
FROM TABLE
INNER JOIN (
   SELECT DISTINCT COLUMN_A
   FROM TABLE
   WHERE COLUMN_B = 'X') SUBTABLE 
ON TABLE.COLUMN_A = SUBTABLE.COLUMN_A
WHERE TABLE.COLUMN_B = 'Y';

我认为这个解决方案可行,但不是最佳方案
谢谢,祝你今天愉快

zbdgwd5y

zbdgwd5y1#

您可以通过以下方式应用简单聚合:

  • 仅筛选您感兴趣的Column_B值
  • 为Column_B的非重复值进行聚合
  • 检查非重复值的数量是否等于2
SELECT Column_A
FROM tab
WHERE Column_B IN ('X', 'Y')
GROUP BY Column_A
HAVING COUNT(DISTINCT Column_B) = 2

或者,您可以在以下项之间使用INTERSECT运算符:

  • Column_B = 'X'的记录
  • Column_B = 'Y'的记录
SELECT DISTINCT Column_A FROM tab WHERE Column_B = 'X'
INTERSECT 
SELECT DISTINCT Column_A FROM tab WHERE Column_B = 'Y'

检查here演示。

相关问题