2013-03-08 18 views
1

我有類似的數據表來執行以下操作:排名由代理和月

Agent | TCV | Parent AccountID | AccountID | Month 
------+-----+------------------+-----------+-------- 
John | 100 | ABC12345   | Sept13445 | 2 
John | 200 | ABC12345   | Sept345 | 2 
John | 150 | CDE12345   | Sept546 | 2 
John | 200 | FTE1456   | Oct3467 | 2 
John | 100 | ABC12345   | Sept13445 | 3 
John | 200 | ABC12345   | Sept345 | 3 
John | 150 | CDE12345   | Sept546 | 3 
John | 200 | FTE1456   | Oct3467 | 3 

我需要的是表現出通過代理進行分組排序的方式,那麼父母每個月accounrDID每個代理。這個想法是,在出口,會有一個代理,TCV,parentaccountDID和月份的列。

因此,如果所有代理都有10個parentaccountDID(但每個代理可能有多個accountDID),它將按照parentAccountDID的分組TCV排名。因此,根據第2個月的分組TCV,約10個parentaccountDID將有10行數據,然後基於第3個月的分組TCV的10個parentaccountDID的10行數據等。

+4

請註明您是通過添加適當的標籤針對RDBMS(甲骨文,SQL服務器,MySQL的,等等)。可能會有利用不被普遍支持的語言或產品功能的答案。此外,通過使用特定的RDBMS標記它,您的問題可能會得到更適合回答的人的關注。 – Taryn 2013-03-08 17:13:37

回答

0
SELECT agent, tcv, parent_accnt_id, accnt_id, curr_month 
    , ROW_NUMBER() OVER (PARTITION BY curr_month, parent_accnt_id ORDER BY curr_month) rnk 
FROM your_table 
/

與您的數據,這是你會得到什麼:

AGENT TCV PARENT_ACCNT_ID ACCNT_ID CURR_MONTH RNK 
------------------------------------------------------------------ 
John  100 ABC12345   Sept13445  2   1 
John  200 ABC12345   Sept345  2   2 
John  150 CDE12345   Sept546  2   1 
John  200 FTE1456   Oct3467  2   1 
John  100 ABC12345   Sept13445  3   1 
John  200 ABC12345   Sept345  3   2 
John  150 CDE12345   Sept546  3   1 
John  200 FTE1456   Oct3467  3   1 
+0

這對高容量數據庫來說性能是否合理?...... 我認爲這會隨着數字的增加而變慢 – 2013-03-08 17:42:38

+0

@Vineet Verma - 這不是問題,Oracle聲稱分析功能更快。這是OP的示例,因爲OP沒有指定RDBMS。你的榜樣不會工作,對不起。它只是給出rank = count的行數,從1到8.你可以修改你的例子並測試它。 – Art 2013-03-08 17:56:40

+0

: - 如果按照順序4 asc順序排列,則輸出爲。這樣他就可以得到按問題給出的迴應。我也同意分​​析功能可能會更好,但我已經看到這些功能創造問題而不是解決方案的場景。無論如何,我也建議他尋找可能有所幫助的密集排序功能。 – 2013-03-08 19:13:56

0

如果你的Oracle SQL數據庫 嘗試下面的查詢它可以幫助你需要:

select Agent ,TCV ,ParentAccountID,Month,count(1) from table group by Agent ,TCV ,ParentAccountID,Month 
order by 5 desc 

你也可以檢查(谷歌)「密集等級在」功能的東西如下:

select Agent ,TCV ,ParentAccountID,Month,dense rank over(Agent ,TCV ,ParentAccountID,Month) from table group by Agent ,TCV ,ParentAccountID,Month 

它躋身值和排序結果。