Sql 列值在输出中重复
我有一个名为BATTERY的表,包含3列,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\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;