2013-04-12 62 views
1

我的表值:刪除重複的基礎條件

COLUMN1 COLUMN2 COLUMN3 
WF1  Email 1640 
WF1  Email 1641 
WF1  Email N/A 
WF3  Email N/A 

預期結果:

COLUMN1 COLUMN2 COLUMN3 
WF1  Email 1640 
WF3  Email N/A 

我需要檢索的COLUMN2 =「電子郵件」,如果列1包含重複的值,我有所有的記錄選擇記錄哪一列3 <>'N/A'。

我讀了關於分區的教程,但仍然不知道如何得到結果。

任何幫助表示讚賞。

CREATE TABLE TABLE1 
    (

    COLUMN1 varchar2(20), 
    COLUMN2 varchar2(20), 
    COLUMN3 varchar2(20) 
    ); 

INSERT INTO TABLE1 
(COLUMN1, COLUMN2, COLUMN3) 
VALUES 
('WF1', 'Email', '1640'); 

INSERT INTO TABLE1 
(COLUMN1, COLUMN2, COLUMN3) 
VALUES 
('WF1', 'Email', '1641'); 

INSERT INTO TABLE1 
(COLUMN1, COLUMN2, COLUMN3) 
VALUES 
('WF1', 'Email', 'N/A'); 

INSERT INTO TABLE1 
(COLUMN1, COLUMN2, COLUMN3) 
VALUES 
('WF3', 'Email', 'N/A'); 

回答

3

嘗試是這樣的:

SELECT column1, column2, column3 
from(
SELECT column1, column2, column3, 
row_number() over (partition BY column1, column2 ORDER BY CASE WHEN column3 = 'N/A' THEN 999999999 ELSE to_number(column3) END) rn 
FROM table1) 
WHERE rn = 1 

Here is a sqlfiddle

+0

謝謝你的幫助:) –

+0

這只是解決了幾個小時的頭髮拉我...謝謝。 –

0
select column1,column2,max(case when column3 = 'N/A' then '0' else column3 end) column3 
from table1 
group by column1,column2; 
0

如果COLUMN1可以在結果不是唯一的:

select column1, column3 from table1 t1 
where column3 != 'N/A' or 
column3 = 'N/A' and not exists 
(select * from table1 t2 
where t2.column1 = t1.column1 and t2.column3 != 'N/A') 

如果COLUMN1必須是獨一無二的結果:

select column1, column3 from table1 t1 
where column3 != 'N/A' and not exists 
(select * from table1 t2 
where t2.column1 = t1.column1 and t2.column3 != 'N/A' and 
to_number(t2.column3, '9999') > to_number(t1.column3, '9999') 
) union 
select column1, column3 from table1 t1 
where column3 = 'N/A' and not exists 
(select * from table1 t2 where t2.column1 = t1.column1 and t2.column3 != 'N/A') 

請注意,我們使用union而不是union all。