SELECT a.户主, a.户主身份证号, ((select count(*) from 查询6 as c 
where a.户主身份证号=c.户主身份证号 
group by c.户主身份证号)) AS 成员数, ((select Sum(c.应领金额) FROM 查询6 AS c
WHERE a.户主身份证号=c.户主身份证号
GROUP BY c.户主身份证号)) AS 合计应领, ((select Sum(c.应扣金额) FROM 查询6 AS c
WHERE a.户主身份证号=c.户主身份证号
GROUP BY c.户主身份证号)) AS 合计应扣, a.姓名 AS 成员, a.关系, a.性别, a.年龄, a.参保时间, a.出生日期, a.保障证号 AS 成员保障证号, a.身份证号 AS 成员身份证号, a.应领金额 AS 成员应领, a.应扣金额 AS 成员应扣, a.是否死亡, a.家庭住址, a.保障类型, a.死亡日期, a.是否统计
FROM 查询6 AS a当记录上万条的时候执行这条sql非常的慢,,,向高手们求解,,,改如何优化???非常感谢!!!!!!

解决方案 »

  1.   

    SELECT a.户主, a.户主身份证号, 
    count(*) over(partition by a.户主身份证号)  AS 成员数,
    sum(a.应领金额) over(partition by a.户主身份证号) AS 合计应领,
    Sum(a.应扣金额) over(partition by a.户主身份证号) AS 合计应扣, 
    a.姓名 AS 成员, a.关系, a.性别, a.年龄, a.参保时间, a.出生日期, a.保障证号 AS 成员保障证号, a.身份证号 AS 成员身份证号, a.应领金额 AS 成员应领, a.应扣金额 AS 成员应扣, a.是否死亡, a.家庭住址, a.保障类型, a.死亡日期, a.是否统计
    FROM 查询6 AS a  看下分析函数
      

  2.   

    --比较一下各种方法的性能
    SELECT a.户主,
           a.户主身份证号,
           b.成员数,
           b.合计应领,
           b.合计应扣,
           a.姓名         AS 成员,
           a.关系,
           a.性别,
           a.年龄,
           a.参保时间,
           a.出生日期,
           a.保障证号     AS 成员保障证号,
           a.身份证号     AS 成员身份证号,
           a.应领金额     AS 成员应领,
           a.应扣金额     AS 成员应扣,
           a.是否死亡,
           a.家庭住址,
           a.保障类型,
           a.死亡日期,
           a.是否统计
      FROM 查询6 AS a,
           (SELECT 户主身份证号, COUNT(1) 成员数, SUM(c.应领金额) 合计应领, SUM(c.应扣金额) 合计应扣
              FROM 查询6 c
             GROUP BY 户主身份证号) b
     WHERE a.户主身份证号 = b.户主身份证号;
      

  3.   


    SELECT a.户主,
           a.户主身份证号,
           b.成员数,
           b.合计应领,
           b.合计应扣,
           a.姓名         AS 成员,
           a.关系,
           a.性别,
           a.年龄,
           a.参保时间,
           a.出生日期,
           a.保障证号     AS 成员保障证号,
           a.身份证号     AS 成员身份证号,
           a.应领金额     AS 成员应领,
           a.应扣金额     AS 成员应扣,
           a.是否死亡,
           a.家庭住址,
           a.保障类型,
           a.死亡日期,
           a.是否统计
    FROM 查询6 AS a,
    JOIN 
      (SELECT 户主身份证号, COUNT(1) 成员数, SUM(c.应领金额) 合计应领, SUM(c.应扣金额) 合计应扣
              FROM 查询6 c
             GROUP BY 户主身份证号) b
    ON a.户主身份证号 = b.户主身份证号;
      

  4.   

    使用over 分组的话应该更理想一些。
      

  5.   

    SELECT a.户主, a.户主身份证号, ((select count(*) from 查询6 as c 
    where a.户主身份证号=c.户主身份证号 
    group by c.户主身份证号)) AS 成员数, ((select Sum(c.应领金额) FROM 查询6 AS c
    WHERE a.户主身份证号=c.户主身份证号
    GROUP BY c.户主身份证号)) AS 合计应领精辟