表1:
name      检查       问题       解决       考核        日期
张三        一         低得多     true     true      2-8
张三        地方       无         flase   flase      2-15
李四         东方      淀粉        flase    true     2-18
张三        健康       大丰收      true     flase     3-5统计表:
name       检查次数    问题个数    解决数    考核数    月份
张三                                                     2
李四                                                     2要求:更新统计表如下统计表:
name       检查次数    问题个数    解决数    考核数    月份
张三          2          1         1        1       2
李四          1          1         0        1       2

解决方案 »

  1.   

    原sql语句是:
    UPDATE    jx_jcxs
    SET              sj_checks =
                              (SELECT     COUNT(id) AS Expr1
                                FROM          jx_scene AS s
                                WHERE      (jc_date BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0) AND DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) - 1) AND 
                                                       (userid = jx_jcxs.userid)),
     sj_problems =
                              (SELECT     SUM(CASE isnull(question, '') WHEN '' THEN 0 ELSE 1 END) AS q
                                FROM          jx_scene AS s
                                WHERE      (jc_date BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0) AND DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) - 1) AND 
                                                       (userid = jx_jcxs.userid)), 
    sj_fashu =
                              (SELECT     SUM(CASE fashu WHEN 1 THEN 1 ELSE 0 END) AS Expr1
                                FROM          jx_scene AS s
                                WHERE      (jc_date BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0) AND DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) - 1) AND 
                                                       (userid = jx_jcxs.userid)), 
    sj_jiejue =
                              (SELECT     SUM(CASE jiejue WHEN 1 THEN 1 ELSE 0 END) AS Expr1
                                FROM          jx_scene AS s
                                WHERE      (jc_date BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0) AND DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) - 1) AND 
                                                       (userid = jx_jcxs.userid)), 
    sj_kaohe =
                              (SELECT     SUM(CASE kaohe WHEN 1 THEN 1 ELSE 0 END) AS Expr1
                                FROM          jx_scene AS s
                                WHERE      (jc_date BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0) AND DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) - 1) AND 
                                                       (userid = jx_jcxs.userid))
    WHERE     (pdmonth = DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0))可以改写简洁些吗?
      

  2.   

    select name , 
           检查 = count(*),
           问题个数 = count(*) - (select count(*) from 表1 and 解决 = 'true' and name = t.name) ,
           解决 = (select count(*) from 表1 and 解决 = 'true' and name = t.name),
           考核 = (select count(*) from 表1 and 考核 = 'true' and name = t.name),
           月份 = (select count(distinct (left(日期,charindex('-',日期)-1)) ) from 表1 where name = t.name)
    from 表1 t
      

  3.   

    表1: 
    name      检查      问题      解决      考核        日期 
    张三        一        低得多    true    true      2-8 
    张三        地方      无        flase  flase      2-15 
    李四        东方      淀粉        flase    true    2-18 
    张三        健康      大丰收      true    flase    3-5 统计表: 
    name      检查次数    问题个数    解决数    考核数    月份 
    张三                                                    2月 
    李四                                                    2 月要求:更新统计表如下 统计表: 
    name      检查次数    问题个数    解决数    考核数    月份 
    张三          2          1        1        1      2 月
    李四          1          1        0        1      2月