数据库是sqlserver2008。
第一张表考核上报表tbKhsb:第二张表部门表tbDepart:简单表述一下tbKhsb表:gid是逻辑主键,gdepart是部门编号,ggrade是单条上报记录审核通过后的得分,gtype是上报类型,1表示党委主体责任得分,2表示第一责任人得分,3表示纪委监督责任得分,4表示一岗双责得分,5表示创先争优得分。
tbDepart表:did是主键也是部门编号,dparent是部门的所属部门编号,这个在当前查询中不用考虑,dname就是部门名称。
查询的结果要求表格展示如下:这五类得分都是各类型上报记录得分的总得分,总得分是这五类得分的和。要求写一条sql语句,直接查出来,然后在页面循环展示一下即可。求高手指导

解决方案 »

  1.   

    思路是这样,你调试下
    ; WITH cte(单位名称,党委主体责任得分,第一责任人得分,
    纪委监督责任得分,表示一岗双责得分,创先争优得分) AS (
    SELECT b.DName ,
       SUM(CASE WHEN a.gtype = 1  THEN ggrade END) ,
       SUM(CASE WHEN a.gtype = 1  THEN ggrade END) ,
       SUM(CASE WHEN a.gtype = 1  THEN ggrade END) ,
       SUM(CASE WHEN a.gtype = 1  THEN ggrade END) ,
       SUM(CASE WHEN a.gtype = 1  THEN ggrade END) 
    FROM tbKhsb a INNER JOIN tbDepart b ON a.gdepart = b.DID
    GROUP BY b.DID,b.DName
    )
    SELECT 单位名称,
    党委主体责任得分,
    第一责任人得分,
    纪委监督责任得分,
    表示一岗双责得分,
    创先争优得分,
    SUM(党委主体责任得分 + 第一责任人得分 + 纪委监督责任得分
    + 表示一岗双责得分 + 创先争优得分) '总得分'
    FROM cte 
      

  2.   

     -- 这个
    ; WITH cte(单位名称,党委主体责任得分,第一责任人得分,
    纪委监督责任得分,表示一岗双责得分,创先争优得分) AS (
    SELECT b.DName ,
       SUM(CASE WHEN a.gtype = 1  THEN ggrade END) ,
       SUM(CASE WHEN a.gtype = 2  THEN ggrade END) ,
       SUM(CASE WHEN a.gtype = 3  THEN ggrade END) ,
       SUM(CASE WHEN a.gtype = 4  THEN ggrade END) ,
       SUM(CASE WHEN a.gtype = 5  THEN ggrade END) 
    FROM tbKhsb a INNER JOIN tbDepart b ON a.gdepart = b.DID
    GROUP BY b.DID,b.DName
    )
    SELECT 单位名称,
    党委主体责任得分,
    第一责任人得分,
    纪委监督责任得分,
    表示一岗双责得分,
    创先争优得分,
    SUM(党委主体责任得分 + 第一责任人得分 + 纪委监督责任得分
    + 表示一岗双责得分 + 创先争优得分) '总得分'
    FROM cte 
      

  3.   


    select  gdepart,
    [1] as [党委主体责任得分],
    [2] as [党委主体责任得分],
    [3] as [纪委监督责任得分],
    [4] as [一岗双责得分],
    [5] as [创先争优得分],
    [1]+[2]+[3]+[4]+[5] as [总得分]
    (select gdepart,ggrade,gtype from tbKhsb) a
    pivot (sum(ggrade) for ggrade in ([1],[2],[3],[4],[5])) p