从tab1中选择col1,col2,col3
rownum col1 col2 col3
1 1 10 A
2 1 15 B
3 1 0 A
4 1 0 C
5 2 0 B
6 3 20 C
7 3 0 D
8 4 10 B
9 5 0 A
10 5 0 B
所需的输出是
col1 col2 col3
1 10 A
1 15 B
2 0 B
3 20 C
4 10 B
5 0 A
5 0 B
col1和col2是我的查找/连接列列,如果col2具有"非零"数据然后我需要忽略/过滤记录0(在上面的例子中我需要过滤记录rownum 3 4和7)如果col2没有任何数据而不是"非零"在这种情况下,只选择带0的记录(在上面的例子中,col1的值为1和5)。
我正在尝试为此编写sql。希望我已经清楚地提到了要求,如果你需要更多的东西,请告诉我。在这种情况下似乎已经空白。
数据库 - Oracle 10g
答案 0 :(得分:1)
SELECT col1,
col2,
col3
FROM (SELECT col1,
col2,
col3,
sum(col2) OVER (PARTITION BY col1) sum_col2
FROM tab1)
WHERE ( ( sum_col2 <> 0
AND col2 <> 0)
OR sum_col2 = 0)
如果col2可能是负数并且要求col2的总和具有“非零”数据,则上述情况可以正常,但是,如果要求任何col2值具有“非零”数据,那么应改为:
SELECT col1,
col2,
col3
FROM (SELECT col1,
col2,
col3,
sum(abs(col2)) OVER (PARTITION BY col1) sum_col2
FROM tab1)
WHERE ( ( sum_col2 <> 0
AND col2 <> 0)
OR sum_col2 = 0)
答案 1 :(得分:0)
SELECT t1.*
FROM tab1 t1
JOIN (SELECT "col1", MAX("col2") AS max2
FROM tab1
GROUP BY "col1") t2
ON t1."col1" = t2."col1"
WHERE ((max2 = 0 AND "col2" = 0)
OR
(max2 != 0 AND "col2" != 0))
ORDER BY "rownum"