2013-10-08 17 views
0

所以我有一個表,其中的數據是這樣的:在SQL查詢來查找一列中重複再使用第二個列,以確定要返回的記錄

╔═══════════╦═════════════╦═════════╗ 
║ Column1 ║ Column2 ║ Column3 ║ 
╠═══════════╬═════════════╬═════════╣ 
║ 127001126 ║ 90489495251 ║  1 ║ 
║ 127001126 ║ 90489495251 ║  2 ║ 
║ 134024323 ║ 81999000004 ║  1 ║ 
║ 346122930 ║ 346000016 ║  2 ║ 
║ 346122930 ║ 346000016 ║  1 ║ 
║ 346122930 ║ 346000016 ║  3 ║ 
║ 346207637 ║ 346000016 ║  1 ║ 
║ 346207637 ║ 346000016 ║  3 ║ 
╚═══════════╩═════════════╩═════════╝ 

我需要的輸出:

╔═══════════╦═════════════╦═════════╗ 
║ Column1 ║ Column2 ║ Column3 ║ 
╠═══════════╬═════════════╬═════════╣ 
║ 127001140 ║ 90489495251 ║ 2  ║ 
║ 134024323 ║ 81999000004 ║ NULL ║ 
║ 346122930 ║ 346000016 ║ 2  ║ 
║ 346207637 ║ 346000016 ║ NULL ║ 
╚═══════════╩═════════════╩═════════╝ 

本質上檢查是否有多個記錄,其中列1 & 2檢查是否有記錄與column3 = 2如果有拉記錄回來。如果列1 & 2永遠不會有一個組合,其中欄3 = 2然後拉一個記錄回來欄3 = NULL

編輯: 代碼我想:

Select * 
from (SELECT* From sometable 
Where column3 = 2) D Full outer join 
(SELECT* FROM sometable 
Where coulmn3 = 1) E 
on D.Column1 = E.Column1 
and D.Column2 = E.Column2 
(SELECT * from 
FROM sometable 
    Where coulmn3 = 3) F Full outer join 
    on E.Column1 = F.Column1 
    and E.Column2 = F.Column2 

我知道上面是不會改變的欄3值爲空。但我雖然= T那就讓我爲每個列1和列2組合

+3

您正在使用哪個數據庫管理系統? Postgres的?甲骨文? –

+0

我正在使用DB2。 – Mrblue1123

+0

爲什麼不包括'127001126 | 90489495251 | null'? –

回答

1

我認爲應該做一個DB2工作以及至少一個記錄:

SELECT Column1, Column2, 
     MAX (CASE Column3 WHEN 2 THEN 2 ELSE NULL END) 
    FROM t 
GROUP BY Column1, Column2; 

爲見this Fiddle ORACLE數據庫。

結果:

COLUMN1  COLUMN2   COLUMN3 
--------- -----------  ------- 
134024323 81999000004  (null) 
127001126 90489495251  2 
346122930 346000016  2 
346207637 346000016  (null) 
+0

問題是我還需要返回多個其他列...這些是我需要過濾的唯一列... – Mrblue1123

+0

不是100%確定您的意思 - 您可以添加完整的示例輸出嗎?無論如何,您可以將其用作過濾器的基礎,例如如http://sqlfiddle.com/#!4/82c3b/9或http://sqlfiddle.com/#!4/82c3b/10中所述。只是一些例子...;) – Trinimon

+0

我過於複雜它...它的作品...非常感謝你 – Mrblue1123

相關問題