该问题在标题中有点难以解释:
我有下表:
ColA | ColB | ColC
-----|------|------
1 |1 |2
1 |1 |3
1 |2 |null
1 |2 |5
1 |2 |6
1 |3 |null
我需要以下结果表:
ColA | ColB | ColC
-----|------|------
1 |1 |2
1 |1 |3
1 |2 |5
1 |2 |6
1 |3 |null
这里是规则:
在示例表中,由于第四行,第三行被滤除。第五行未过滤掉,因为没有其他行的ColB = 3且ColC!= null。
使用分析功能:
WITH cte AS (
SELECT *, COUNT(ColC) OVER (PARTITION BY ColA) cnt
FROM yourTable
)
SELECT ColA, ColB, ColC
FROM cte
WHERE (cnt > 0 AND ColC IS NOT NULL) OR cnt = 0;