2012-09-19 63 views
1

我有一個Column 1在這種情況下是重複通過所有行相同的值。 Column 2具有不重複的行,其中的值可能會重複。我想要創建一個名爲Group的列來顯示行按照順序排列(按Column 2排序)。基本上,我需要創建一個類似於此的輸出:創建一個列組到行和連續計數

Column 1 | Column 2 | Group 
-------------------------------- 
100  | AA   | 1 
100  | AA   | 1 
100  | AA   | 1 
100  | BB   | 2 
100  | BB   | 2 
100  | CC   | 3 
100  | DD   | 4 
100  | DD   | 4 
+0

重複行有什麼意義? – RedFilter

+0

該查詢僅從表中拉出幾列。如果我選擇了所有列,他們將是不同的。它僅用於查詢目的。 – user1683776

回答

0

您可以使用oracle中的dense_rank函數。

select col1, 
     col2, 
     dense_rank() over (partition by col1 
         order by col2) group_column 
    from test_table; 

     COL1 CO GROUP_COLUMN 
---------- -- ------------ 
     100 AA   1 
     100 AA   1 
     100 AA   1 
     100 BB   2 
     100 BB   2 
     100 CC   3 
     100 DD   4 
     100 DD   4 

您可以使用「order by col1,col2」來驗證結果。

+0

完美,這就是我一直在尋找的。感謝Rajesh! – user1683776

1

試試這個代碼:

with list as 
(select distinct col2 from tab order by 1), 
     listnum as 
(select rownum, col2 from list) 

select * 
from listnum l 
join tab t on t.col2=l.col2; 

SQL Fiddle DEMO

鏈接有關的代碼,我用:

2

您想要的功能是dense_rankrank

select column1, column2, 
     dense_rank() over (order by column2) 
from t 

DENSE_RANK()可從1號到組的數量,沒有間隙。此外,這不應該有一個分區,因爲你在做什麼。