假设我经过如干个子查询按照 ORDER BY A_NAME,B_NAME后,得到以下的数据A_name    B_name    C_name
A1            A1_B1       60
A1            A1_B2       80
A1            A1_B3      100
A1            A1_B4       120A2             A2_B1    70
A2            A2_B2       90
A2            A2_B3           50
A2            A2_B4      100A3           A3_B1      90
A3           A3_B2      80
A3           A3_B3         100
A3          A3_B4      120我想比较C_name这列中在同一个 A_name中按照 B_name排序排序的  C_name是不是依次增大的,如果不是就把这组数据找出来,或者做标记,比如上面的数据,最终我需要得到 A2,A3这两组数据,或者在给这两组数据做个标记。我的思路是写一个函数来比较C_name,但是不知道怎么实现,可以在函数中使用游标,各位大神有什么建议吗?十万火急的.
这最终是做成一个报表数据中错误核查的,同一个A_name中 按照 B_name 排序,C_name应该一次增大,否则就是错误数据,现在就是把错误数据找出来

解决方案 »

  1.   

    必须用sql实现吗?可以考虑写段程序找
      

  2.   


    是的,必须要写SQL语句来,写一个存储过程或者函数都行,要是可以用Java代码实现的话我就不愁了,有什么好的建议吗
      

  3.   


    是的,必须要写SQL语句来,写一个存储过程或者函数都行,要是可以用Java代码实现的话我就不愁了,有什么好的建议吗
    SELECT 
      * 
    FROM
      tabl 
    WHERE A_name IN 
      (SELECT 
        z.A_name 
      FROM
        (SELECT 
          t.A_name,
          t.B_name,
          t.C_name,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name) count1,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name 
            AND C_name <= t.C_name) count2 
        FROM
          tabl t) z 
      WHERE z.count1 != z.count2) 
    ORDER BY A_name,
      B_name ;
      

  4.   


    是的,必须要写SQL语句来,写一个存储过程或者函数都行,要是可以用Java代码实现的话我就不愁了,有什么好的建议吗
    SELECT 
      * 
    FROM
      tabl 
    WHERE A_name IN 
      (SELECT 
        z.A_name 
      FROM
        (SELECT 
          t.A_name,
          t.B_name,
          t.C_name,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name) count1,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name 
            AND C_name <= t.C_name) count2 
        FROM
          tabl t) z 
      WHERE z.count1 != z.count2) 
    ORDER BY A_name,
      B_name ;如果我是要写成一个函数,传入A_NAME的值怎么实现和调用这个函数,因为这三条数据也是经过几个表然后子查询到的,我现在研究一下你的语句,谢谢了,这是直接我要查询的语句中写吗?
      

  5.   


    是的,必须要写SQL语句来,写一个存储过程或者函数都行,要是可以用Java代码实现的话我就不愁了,有什么好的建议吗
    SELECT 
      * 
    FROM
      tabl 
    WHERE A_name IN 
      (SELECT 
        z.A_name 
      FROM
        (SELECT 
          t.A_name,
          t.B_name,
          t.C_name,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name) count1,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name 
            AND C_name <= t.C_name) count2 
        FROM
          tabl t) z 
      WHERE z.count1 != z.count2) 
    ORDER BY A_name,
      B_name ;
    不用写存储过程和函数更好了,就是A是在另一个表上的,B和C在同一个表上
      

  6.   


    是的,必须要写SQL语句来,写一个存储过程或者函数都行,要是可以用Java代码实现的话我就不愁了,有什么好的建议吗
    SELECT 
      * 
    FROM
      tabl 
    WHERE A_name IN 
      (SELECT 
        z.A_name 
      FROM
        (SELECT 
          t.A_name,
          t.B_name,
          t.C_name,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name) count1,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name 
            AND C_name <= t.C_name) count2 
        FROM
          tabl t) z 
      WHERE z.count1 != z.count2) 
    ORDER BY A_name,
      B_name ;
    不用写存储过程和函数更好了,就是A是在另一个表上的,B和C在同一个表上
    是的,必须要写SQL语句来,写一个存储过程或者函数都行,要是可以用Java代码实现的话我就不愁了,有什么好的建议吗
    SELECT 
      * 
    FROM
      tabl 
    WHERE A_name IN 
      (SELECT 
        z.A_name 
      FROM
        (SELECT 
          t.A_name,
          t.B_name,
          t.C_name,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name) count1,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name 
            AND C_name <= t.C_name) count2 
        FROM
          tabl t) z 
      WHERE z.count1 != z.count2) 
    ORDER BY A_name,
      B_name ;
    不用写存储过程和函数更好了,就是A是在另一个表上的,B和C在同一个表上
    只要把tabl 替换成你说的表的关联子查询或者视图就可以了
      

  7.   


    是的,必须要写SQL语句来,写一个存储过程或者函数都行,要是可以用Java代码实现的话我就不愁了,有什么好的建议吗
    SELECT 
      * 
    FROM
      tabl 
    WHERE A_name IN 
      (SELECT 
        z.A_name 
      FROM
        (SELECT 
          t.A_name,
          t.B_name,
          t.C_name,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name) count1,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name 
            AND C_name <= t.C_name) count2 
        FROM
          tabl t) z 
      WHERE z.count1 != z.count2) 
    ORDER BY A_name,
      B_name ;
    不用写存储过程和函数更好了,就是A是在另一个表上的,B和C在同一个表上
    是的,必须要写SQL语句来,写一个存储过程或者函数都行,要是可以用Java代码实现的话我就不愁了,有什么好的建议吗
    SELECT 
      * 
    FROM
      tabl 
    WHERE A_name IN 
      (SELECT 
        z.A_name 
      FROM
        (SELECT 
          t.A_name,
          t.B_name,
          t.C_name,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name) count1,
          (SELECT 
            COUNT(1) 
          FROM
            tabl 
          WHERE A_name <= t.A_name 
            AND B_name <= t.B_name 
            AND C_name <= t.C_name) count2 
        FROM
          tabl t) z 
      WHERE z.count1 != z.count2) 
    ORDER BY A_name,
      B_name ;
    不用写存储过程和函数更好了,就是A是在另一个表上的,B和C在同一个表上
    只要把tabl 替换成你说的表的关联子查询或者视图就可以了那就是查了半天都么有数据出来