2014-01-29 89 views
0

這個小問題是擡高了牆......我有這個表:將查詢結果放在一起?

ID N1 N2 N3 
---------------------------------------------- 
1  -  2  - 

1  9  -  - 

1  -  -  3 

2  -  -  2 

2  1  -  - 

3  -  -  - 

3  1  -  3 

,我想這樣的結果:

ID N1 N2 N3 
----------------------------- 
1  9  2  3 

2  1  -  2 

3  1  -  3 

我的意思是,我希望把排在一起,這取決於ID和保留其他列中不爲空的數據,在Oracle ...

請幫幫我!我對PL/SQL瞭解不多,但我想通過使用函數或過程可以找到解決方案。

+0

檢查這個[問題](http://stackoverflow.com/questions/21410456/sql - 過濾出特定行)請! –

回答

1

使用分鐘,這樣就可以實現

with tab(ID,N1,N2,N3) as (
select 1,NULL,2,NULL from dual union all 
select 1,9,NULL,NULL from dual union all 
select 1,NULL,NULL,3 from dual union all 
select 2,NULL,NULL,2 from dual union all 
select 2,1,NULL,NULL from dual union all 
select 3,NULL,NULL,NULL from dual union all 
select 3,1,NULL,3 from dual) 
----- 
--End of data 
----- 
select id, min(n1), min(n2), min(n3) 
    from tab 
    group by id 

輸出

| ID | MIN(N1) | MIN(N2) | MIN(N3) | 
|----|---------|---------|---------| 
| 1 |  9 |  2 |  3 | 
| 2 |  1 | (null) |  2 | 
| 3 |  1 | (null) |  3 | 
+0

謝謝!有用!您能否請我推薦一步一步的教程或參考指南? – d0hk0o

+0

您可以參考[此鏈接](http://www.techonthenet.com/oracle/index.php)瞭解Oracle語句和函數的基本知識。在這個查詢中,我將ID中的所有行分組,並從每個組中選擇n1,n2和n3的最小值。由於對於特定的組,只有一行具有值(其餘爲空),它將顯示在查詢中。 – San

1

假設那些「 - 」表示值爲null,那麼可以使用FIRST_VALUE分析函數和IGNORE NULLS選項。

實例查詢:

select id, 
first_value(n1) ignore nulls over (partition by n1 order by n1) as N1, 
first_value(n2) ignore nulls over (partition by n2 order by n2) as N2, 
first_value(n3) ignore nulls over (partition by n3 order by n3) as N3 
from table; 
可以發現

在功能上的更多信息on Oracle Base

0

如何簡單地MINMAX分組的記錄(根據您的需求)N2N1,價值觀,N3

SELECT id, MIN(n1), MIN(n2), MIN(n3) 
FROM <table_name> 
GROUP BY id;