日期:2014-05-17  浏览次数:20848 次

如何分组求出,几列和其中一列的关系只出现过一次的呢
本帖最后由 luoyanqun 于 2014-04-13 23:21:26 编辑
                DXID          DXLXID          COMPID
1 5069 1300
2 5069 1300
3 5069 1300
4 5069 1400
5 5069 1500
6 5069 1600
7 5069 1700
8 5069 1800
6 5069 1200
6 5069 1500
8 5069 1700

如上数据有什么方法挑选出,DXID,和DXLXID,对应多个COMPID的列,然后再挑选出对应了一个COMPID的列呢?
 SELECT ROW_NUMBER() OVER(PARTITION BY dxid,dxlxid  ORDER BY compid  DESC) compid_count,
          dxid,dxlxid,compid  from mytest
这个可以出求出如下结果,可惜,怎么分离出来呢?

1 1 5069 1300  
1 2 5069 1300  
1 3 5069 1300  
1 4 5069 1400  
1 5 5069 1500  
1 6 5069 1600  
2 6 5069 1500  
3 6 5069 1200  
1 7 5069 1700  
1 8 5069 1800  
2 8 5069 1700  

------解决方案--------------------
在上面的基础上进行分组统计,选取统计结果为1的那条记录便是:
WITH A AS (SELECT ROW_NUMBER() OVER(PARTITION BY dxid, dxlxid ORDER BY compid DESC) AS compid_count,
               dxid,
               dxlxid,
               compid
          FROM mytest)
SELECT A.compid_count, A.dxid, A.dxlxid, A.compid
  FROM A,
       (SELECT compid_count, COUNT(*) AS num
          FROM A
         GROUP BY compid_count) B
 WHERE A.compid_count = B.compid_count
   AND B.num = 1;


------解决方案--------------------
引用:
                DXID          DXLXID          COMPID
1 5069 1300
2 5069 1300
3 5069 1300
4 5069 1400
5 5069 1500
6 5069 1600
7 5069 1700
8 5069 1800
6 5069 1200
6 5069 1500
8 5069 1700

如上数据有什么方法挑选出,DXID,和DXLXID,对应多个COMPID的列,然后再挑选出对应了一个COMPID的列呢?
 SELECT ROW_NUMBER() OVER(PARTITION BY dxid,dxlxid  ORDER BY compid  DESC) compid_count,
          dxid,dxlxid,compid  from mytest
这个可以出求出如下结果,可惜,怎么分离出来呢?

1 1 5069 1300  
1 2 5069 1300  
1 3 5069 1300  
1 4 5069 1400  
1 5 5069 1500  
1 6 5069 1600  
2 6 5069 1500  
3 6 5069 1200  
1 7 5069 1700  
1 8 5069 1800  
2 8 5069 1700  

with mytest as(