col1    col2     col3      col4    col5      col6             col7    col81        100280 1 EL 25729 IN 1/1/2010 2 3
2 100280 1 EL 25729 IN 1/1/2010 2 4
3 100380 1 EL 22613 OUT 1/4/2010 2 2
4 100380 1 EL 733 IN 1/5/2010 2 2
5 100489 1 EL 28606 OUT 1/6/2010 2 1
6 100489 1 EL 20843 IN 1/7/2010 1 1现在的要求是:根据col5  col6  col7  col8 排序  
              然后把排序得出来的结果根据 col5 col6 col7 来把col2 col3 相等的抽出来讲到这,我知道你没明白我的意思。再进一步解释:在第1条数据的col5 col6 col7 与第2条数据的col5 col6 col7 一样的
基础上再去判断第一条的col2 与第二条的col2 ,第一条的col3与第二条的col3 是否相等,如果相等 取出来

解决方案 »

  1.   

    不完全对  是col5 col6 col7 相等的记录都要比  比较col2 col3   如果等 则抽出来
      

  2.   

    如果第一条的col5 col6 col7 与 第三条的col5 col6 col7 一样 那也得去比
      

  3.   


    按你的逻辑,可以简化成:col5 col6 col7 col2 col3 相等就抽出来可以写个SQL给你测试下
      

  4.   

    --你测试下这个,应该就是你要的结果select *
      from t 
     where (col5, col6, col7, col2, col3) in (select col5, col6, col7, col2, col3
      from t
     group by col5, col6, col7, col2, col3
    having count(1) > 1)
      

  5.   

    select *
    from t 
    where (col5, col6, col7, col2, col3) in (select col5, col6, col7, col2, col3
    from t
    group by col5, col6, col7, col2, col3
    having count(1) > 1)
    --或许加个order by 就是你要的结果了
    order by col5, col6, col7, col8--如果还不对的话,就是1) 我还没理解你的意思 2)你还没讲清楚你要的结果,把你预期的结果都列出来
      

  6.   


    经测试,无语法错误,难道你用的不是ORACLE?
    create table scott.t2345(col5 varchar2(10), col6 varchar2(10), col7 varchar2(10), col2 varchar2(10), col3 varchar2(10));
    select *
    from scott.t2345 t 
    where (col5, col6, col7, col2, col3) in (select col5, col6, col7, col2, col3
    from scott.t2345 t
    group by col5, col6, col7, col2, col3
    having count(1) > 1)
      

  7.   

    select a.col1,
           a.col2,
           a.col3,
           a.col4,
           a.col5,
           a.col6,
           a.col7,
           a.col8,
           a.col9
      from (select t.col1,
                   t.col2,
                   t.col3,
                   t.col4,
                   t.col5,
                   t.col6,
                   t.col7,
                   t.col8,
                   t.col9,
                   count(*) over(partition by col2, col3, col6, col7, col8 ) g_num
              from t_first t) a
     where a.g_num > 1
     order by a.col6, a.col7,  a.col8;
      

  8.   

    其实你用个分析函数就可以了,格式如下
    select a.col1, a.col2, a.col3,a.col4,
           a.col5,a.col6,a.col7, a.col8, a.col9
      from (select t.col1,t.col2,t.col3,t.col4,
                   t.col5,t.col6,t.col7,t.col8,t.col9,
                   count(*) over(partition by col2, col3, col6, col7, col8 ) g_num
              from t_first t) a
     where a.g_num > 1
     order by a.col6, a.col7,  a.col8;