2015-10-24 22 views
0

我的SQL代碼,我想從COLUMN1每一個獨特的價值相同的ROWNUM。 例如在本例中,我想對ROWNUM 2,3和第2列的rownum 2製作的rownum null值

select rownum, 
    t1.column1 as column1, 
    t1.Column2 as column2, 
    t3.Column3 as column3 
from Table1 t1,Table3 t3,Table2 t2 
where t3.S_ID=t2.AS_ID 
and t2.KT_ID=t1.T_ID 

enter image description here

空值我如何實現這一點?

+1

這RDBMS你[R使用..? –

+0

的可能的複製(http://stackoverflow.com/questions/32882516/get-rid-from-one-column-duplicate-values-in-two-column- [從一列重複值個列選擇擺脫]選擇) – lad2025

+0

我使用oracle rdbms – Anastasis

回答

0
 This might help you... 

     select rownum,column1,column2,column3 from (

Select rownum,column1,column2,column3, 
row_number() over(partition by column1,column2 order by column1,column2) as analytic_rnm 
from(
select rownum, 
    column1 as column1, 
    Column2 as column2, 
    Column3 as column3 
from Table1 t1,Table3 t3,Table2 t2 
where t3.S_ID=t2.AS_ID 
and t2.KT_ID=t1.T_ID 
)X 
)M 
where analytic_rnm=1 

union all 
select NULL as rownum, 
column1,column2,column3 from (
Select rownum,column1,column2,column3, 
row_number() over(partition by column1,column2 order by column1,column2) as analytic_rnm 
from(
select rownum, 
    column1 as column1, 
    Column2 as column2, 
    Column3 as column3 
from Table1 t1,Table3 t3,Table2 t2 
where t3.S_ID=t2.AS_ID 
and t2.KT_ID=t1.T_ID 
)X)Y 
where analytic_rnm>1 
+0

與...條件 –

0
select 
    case when row_number() -- if it's the first row per group... 
      over(partition by column1 
        order by column3) = 1 
     then dense_rank() -- ... return 1,2,3 
      over(order by column1) 
     else null 
    end, 
    t1.column1 as column1, 
    t1.Column2 as column2, 
    t3.Column3 as column3 
from Table1 t1,Table3 t3,Table2 t2 
where t3.S_ID=t2.AS_ID 
and t2.KT_ID=t1.T_ID 
2

首先,學習正確的明確join語法。其次,你可以很容易地做你想要使用的是什麼lag()等分析功能:

select (case when column1 = lag(column1) over (order by column1, column3) 
      then NULL 
      else dense_rank() over (order by column1) 
     end) as rn, 
     t1.column1 as column1, 
     t1.Column2 as column2, 
     t3.Column3 as column3 
from Table1 t1 join 
    Table2 t2 
    on t2.KT_ID = t1.T_ID join 
    Table3 t3 
    on t3.S_ID = t2.AS_ID 
order by column1, column3; 

一些注意事項:

  • SQL查詢返回無序結果集。如果您希望按特定順序排列行 - 或者在下次運行查詢時以相同順序排序 - 則請包含order by
  • 我任意添加column3來排序。它可以是任何列,使穩定。也就是說,每行都有一組唯一的訂單鍵,因此每次都有相同的順序。
  • 相同的排序條件被用於lag()功能,但只能column1用於dense_rank()
  • 瞭解顯式join語法。它更強大,幾乎每個人都認爲它更易於閱讀。
+0

+1爲您更換test111實際上很難解釋你在做什麼,加上正確的「加入」,並消除了普通初學者假設表格可靠地具有先天順序的假設。 –