数据量
SQL> select count(*) from zinhosmedikind;  COUNT(*)
----------
      9278SQL> select count(*) from checkuplistdetail;  COUNT(*)
----------
    173169

解决方案 »

  1.   

    不知道你的需求是什么,但是看你的连接,用了太多的子查询和union all,这样会影响速度,
    我想可以分析一下需求,重新改写.
      

  2.   

    你这样肯定不会快,把这么多数据共查询了七遍,而且最后又在无索引的情况下将查询出来的数据又进行联表,当然很慢。要不改成这样.先通过
    SELECT
    CENTERCODE,
    SERIALNO,
    LISTNO,
    MEDIKINDCODE,
    SUM(AMOUNT) AS AMOUNT 
    FROM CHECKUPLISTDETAIL
    WHERE MEDIKINDCODE='00'
    GROUP BY CENTERCODE,SERIALNO,LISTNO,MEDIKINDCODE
    UNION ALL
    SELECT 
    HOSCODE AS CENTERCODE,
    INHOSBALANCENO AS SERIALNO,
    0 AS LISTNO,
    MK_ID AS MEDIKINDCODE,
    sum(AMOUNT)/count(hoscode) as amount 
    FROM ZINHOSMEDIKIND
    group by hoscode,inhosbalanceno,mk_id )
    得到所有的行数据,然后在这上面处理数据。
      

  3.   

    太多的子查询与连接当然会慢
    可以重新分析你的需求,简化代码.
    宁愿建多几个view ,而不要把同样的查询写在一堆.
      

  4.   

    如果是行转列,为什么不用DECODE 或者CASE 语句呢
      

  5.   

    稍微看了一下,所有数据都是从两个表中提出来的,把具体的意思是要几个合计数据。
    我有这么两个建议:
      1.如果界面可以控制,那么直接把数据提取出来,横排数据的事情交给界面
      2.如果一定要用sql实现横排,建议在存储过程中用游标处理一下就是
      

  6.   

    to bluebirdlxp(bluebird)如果是行转列,为什么不用DECODE 或者CASE 语句呢如何作能?
      

  7.   

    本程序用sql实现,用存储过程实现不太合适,因为数据一直在变。
      

  8.   

    select   m.centercode, m.serialno, m.listno
           , sum (decode (medikindcode, '00', amount, 0)) amount00
           , sum (decode (medikindcode, '01', amount, 0)) amount01
           , sum (decode (medikindcode, '02', amount, 0)) amount02
           , sum (decode (medikindcode, '03', amount, 0)) amount03
           , sum (decode (medikindcode, '04', amount, 0)) amount04
           , sum (decode (medikindcode, '05', amount, 0)) amount05
           , sum (decode (medikindcode, '06', amount, 0)) amount06
           , sum (decode (medikindcode, '07', amount, 0)) amount07
           , sum (decode (medikindcode, '08', amount, 0)) amount08
           , sum (decode (medikindcode, '09', amount, 0)) amount09
        from (select   centercode, serialno, listno, medikindcode, sum (amount) amount
                  from checkuplistdetail
              group by centercode, serialno, listno, medikindcode
              union all
              select   hoscode, inhosbalanceno, 0, mk_id, sum (amount) / count (hoscode) amount
                  from zinhosmedikind
              group by hoscode, inhosbalanceno, mk_id)
    group by m.centercode, m.serialno, m.listno
      

  9.   

    KingSunSha(弱水三千) 
    好久都没看见你了