2013-03-08 39 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 

它跻身值和排序结果。