当前位置: 代码迷 >> Oracle管理 >> SQL GROUP BY 类似有关问题
  详细解决方案

SQL GROUP BY 类似有关问题

热度:159   发布时间:2016-04-24 04:06:05.0
SQL GROUP BY 类似问题
   各位大神求帮忙哇,我有个关于sql语句的问题一直想不出来怎么查询: 查询的时候我希望查询可以分组,但不同于group by A,B,我想让 column='x' 的列和 column=‘y’ 的列中的内容不按顺序的进行分组。举个例子:

假设我有一张messages表:


然后我想让其按下面的方式分组:


请教各位大神,我该怎么写sql语句?

谢谢啦!
------解决思路----------------------

-- 凑个热闹
SQL> 
SQL> create table messages(msgid int ,msgfrom varchar(10) , msgto varchar(10));
 
Table created
SQL> begin
  2    insert into messages values(1,'A','B');
  3    insert into messages values(2,'A','C');
  4    insert into messages values(3,'C','D');
  5    insert into messages values(4,'B','A');
  6    insert into messages values(5,'D','C');
  7  end ;
  8  /
 
PL/SQL procedure successfully completed
SQL> select t.* from messages t ;
 
                                  MSGID MSGFROM    MSGTO
--------------------------------------- ---------- ----------
                                      1 A          B
                                      2 A          C
                                      3 C          D
                                      4 B          A
                                      5 D          C
SQL> select t.* ,
  2   dense_rank() over(order by least(t.msgfrom , t.msgto) , greatest(t.msgfrom , t.msgto)) groupid
  3  from messages t
  4  order by groupid , t.msgfrom;
 
                                  MSGID MSGFROM    MSGTO         GROUPID
--------------------------------------- ---------- ---------- ----------
                                      1 A          B                   1
                                      4 B          A                   1
                                      2 A          C                   2
                                      3 C          D                   3
                                      5 D          C                   3
SQL> drop table messages purge ;
 
Table dropped
 
SQL> 
  相关解决方案