Hi,
I had this requirement in my project to group by a column of a table and produce a concatenation of row values for a second column for each group. For example consider a table with two columns:
Department Employee
1 Chandan
1 Jagannath
2 Rahul
2 Pradeep
2 Manjunath
I want the result like this:
Department Name_List
1 Chandan ,Jagannath
2 Rahul,Pradeep,Manjunath
And since this was in SQL SERVER 2000 , there was no recursive query and I had to write using sql only. I finally wrote it by transposing the rows and then concatenating the result. Something like:
Department Name1 Name2 Name3
1 Chandan Jagannath -
2 Rahul Pradeep Manjunath
As you can see, here there is a fundamental limit. How many columns will you consider for transposing as you don't know how many rows are there for each department. Well the only way to proceed is to find the maximum count of rows for any department and transpose it to that many (or more) number of columns. I did just that and it worked.
Now in Oracle there is something called SYS_CONNECT_BY_PATH which can be sued with a recursive query to achieve this. But wonders of wonders , MYSQL has a function called GROUP_CONCAT which does exactly this. A concatenation of rows for each group. Now I am changing my perception of MySql. With features like this, it is easily the coolest database for developers. May be it is not ideal for Data warehouses but who cares about that!!
So if you guys ever come across this kind of requirement in Oracle or MySQL make sure to use these features:)
See this links for more:
Oracle
http://www.oracle.com/technology/oramag/code/tips2006/101606.html
MySQL http://www.oreillynet.com/databases/blog/2007/05/debunking_group_by_myths.html
Enjoy!!
Search This Blog
Thursday, October 4, 2007
Subscribe to:
Post Comments (Atom)
0 Responses:
Post a Comment