2014-09-04 65 views
0

我有以下演示代碼。 我怎樣才能得到想要的output.Its只是沒有在我的腦海未來:-(它必須是一個簡單的變化通過使用分析功能組Oracle

WITH Abc AS (SELECT 'AB' AS code,'Z12' AS des, 123 AS tk FROM dual UNION 
SELECT 'AB','Z14',234 FROM dual UNION 
SELECT 'ACB','D12',34 FROM dual UNION 
SELECT 'ACB','D12',36 FROM dual UNION 
SELECT 'ACB','F12',35 FROM dual UNION 
SELECT 'ABX','G44',243 FROM dual UNION 
SELECT 'ABX','H44',654 FROM dual UNION 
SELECT 'ABX','J12',534 FROM dual UNION 
SELECT 'ABQ',NULL,356 FROM dual) 

SELECT DISTINCT tk,code,des ,code||'_'||row_number() OVER (PARTITION BY code ORDER BY code,des) AS str FROM abc 
ORDER BY 2,3; 

OUTPUT:。

tk code des str 
--- --- --- --- 
123 AB Z12 AB_1 
234 AB Z14 AB_2 
356 ABQ  ABQ_1 
243 ABX G44 ABX_1 
654 ABX H44 ABX_2 
534 ABX J12 ABX_3 
34 ACB D12 ACB_1 --- ACB_1 
36 ACB D12 ACB_2 ----I want ACB_1 here too since desc is same for that code 
35 ACB F12 ACB_3 

回答

1
**USE RANK() instead of rownumber()** 


WITH Abc AS (SELECT 'AB' AS code,'Z12' AS des, 123 AS tk FROM dual UNION 
SELECT 'AB','Z14',234 FROM dual UNION 
SELECT 'ACB','D12',34 FROM dual UNION 
SELECT 'ACB','D12',36 FROM dual UNION 
SELECT 'ACB','F12',35 FROM dual UNION 
SELECT 'ABX','G44',243 FROM dual UNION 
SELECT 'ABX','H44',654 FROM dual UNION 
SELECT 'ABX','J12',534 FROM dual UNION 
SELECT 'ABQ',NULL,356 FROM DUAL) 

SELECT DISTINCT TK,CODE,DES ,CODE||'_'||rank() OVER (PARTITION BY CODE ORDER BY CODE,DES) AS STR FROM ABC 
ORDER BY 2,3; 
+0

非常感謝。 .ya它工作,令人驚訝的是我在使用等級之前嘗試過,它沒有工作,也許我做錯了什麼。 – 2014-09-04 19:47:15