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