我想只获取具有值的行以及特定用户名列的NULL以外的其他值。
如果两个行对于该特定用户名都为null,则它应该在输出中仅显示Null一次。如果同一用户名的行数超过两行且为null,则显示该值仅为空。
下面是示例示例和输出。如何使用sql查询完成?
Col1 | Col2
-------------------------
a | abc
a | bc
b | null
b | null
c | der
c | null
输出:
Col1 | Col2
-------------------------
a | abc
a | bc
b | null
c | der
答案 0 :(得分:1)
概述这个想法,可能会有一些语法错误,无法访问oracle。
SELECT * FROM
( SELECT DISTINCT USERNAME FROM <TABLE> ) USERS
LEFT OUTER JOIN
( SELECT USERNAME, COL2 FROM <TABLE> WHERE COL2 IS NOT NULL) USERS_COL2
ON
USRES.USERNAME = USERS_COL2.USERNAME
答案 1 :(得分:0)
你使用listagg()或stragg()
drop table test;
create table test (
col1 varchar2(10),
col2 varchar2(10)
);
insert into test values ( 'a','abc');
insert into test values ( 'a','abc');
insert into test values ( 'b',null);
insert into test values ( 'b',null);
insert into test values ( 'c','der');
insert into test values ( 'c',null);
commit;
select col1,
listagg (col2,',') within group (order by col1) col2
from test
group by col1;
COL1 COL2
---------- -----------
a abc,abc
b
c der
select col1, stragg (col2)
from test
group by col1;
答案 2 :(得分:0)
select col1, col2, count(*)
from omc.test
group by col1,col2;
你可以删除count(*)