3

私のテーブル値:

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 = 'Email' であるすべてのレコードを取得する必要があり、column1 に重複した値が含まれている場合、column3 <> 'N/A' であるレコードを選択する必要があります。

partition by に関するチュートリアルを読みましたが、結果を取得する方法がまだわかりません。

どんな助けでも大歓迎です。

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');
4

3 に答える 3

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

ここにsqlfiddleがあります

于 2013-04-12T09:35:28.687 に答える