Sql 列值在输出中重复

Sql 列值在输出中重复,sql,oracle-sqldeveloper,Sql,Oracle Sqldeveloper,我有一个名为BATTERY的表,包含3列,BATTERY\u PN,MSDS\u FILE\u NAME和UNDOT\u FILE\u NAME。表中的数据如下所示 BATTERY_PN MSDS_FILE_NAME UNDOT_FILE_NAME 135259-0000 MSDS_ API-700-008685-005 40GP.PDF UNDOT_ API-700-008685-005 40GP.

我有一个名为BATTERY的表,包含3列,
BATTERY\u PN,MSDS\u FILE\u NAME
UNDOT\u FILE\u NAME
。表中的数据如下所示

BATTERY_PN         MSDS_FILE_NAME                           UNDOT_FILE_NAME
135259-0000        MSDS_ API-700-008685-005 40GP.PDF        UNDOT_ API-700-008685-005 40GP.PDF
135259-0000        MSDS_ API-700-008685-005 40GP.PDF        China Sea Cert API-700-008685-005 40GP.PDF
我想写一个select语句,它不会重复任何列名值。如果我有3个不同的
MSDS\u文件名
值,它应该显示3行,最后一行将在
UNDOT\u文件名
中显示
NULL

预期输出:

BATTERY_PN         MSDS_FILE_NAME                           UNDOT_FILE_NAME
135259-0000        MSDS_ API-700-008685-005 40GP.PDF        UNDOT_ API-700-008685-005 40GP.PDF
135259-0000                                                 China Sea Cert API-700-008685-005 40GP.PDF

嗯,如果我理解正确,您可以使用
行编号()


您的预期结果和解释不匹配。如果
MSDS\u文件名
有3个不同的值,而
UNDOT\u文件名
有2个值,则此操作无效。
select BATTERY_PN,
       (case when 1 = row_number() over (partition by battery_pn, MSDS_FILE_NAME order by UNDOT_FILE_NAME)
             then MSDS_FILE_NAME
        end) as MSDS_FILE_NAME,
       UNDOT_FILE_NAME
from battery;
create table battery(BATTERY_PN varchar2(100),MSDS_FILE_NAME varchar2(100),UNDOT_FILE_NAME varchar2(100));
insert into battery values('135259-0000', 'MSDS_ API-700-008685-005 40GP.PDF','UNDOT_ API-700-008685-005 40GP.PDF');
insert into battery values('135259-0000', 'MSDS_ API-700-008685-005 40GP.PDF',' China Sea Cert API-700-008685-005 40GP.PDF');
insert into battery values('135259-0000', 'MSDS_ API-700-008685-005 40GP.PDF','UNDOT_ API-700-008685-005 40GP.PDF');
insert into battery values('135259-0000', 'MSDS_ API-700-008685-005 40GP.PDF',' China Sea Cert API-700-008685-005 40GP.PDF');


SELECT battery_pn,(case when 1=rownum
    then
    msds_file_name END)  as MSDS_FILE_NAME ,undot_file_name 
FROM battery;