消息关闭
    暂无新消息!

9个回答

︿ 3
--3、按月汇总查询各部门的工资合计占公司总工资的百分比,要求结果如下:
--  月份 部门编号 部门名称 部门合计工资 占总工资(%)

select xs.mDate,bm.deptcode,bm.deptName,SUM(salary+bonus) as TotalMoney ,
( SUM(salary+bonus)/( 
select  isnull(SUM(salary+bonus),0) from  t_salary as xs left join t_employee as emp
 on xs.empID=emp.EmpID
 left join t_department as bm
 on bm.depID = emp.depID
)*100)  as 'gongsi'
from t_salary as xs left join t_employee as emp
 on xs.empID=emp.EmpID
 left join t_department as bm
 on bm.depID = emp.depID
 group by  xs.mDate,bm.deptcode,bm.deptName
 order by bm.deptcode
︿ 2
当练手,就替楼主写了一下表结构代码。
if object_id('t_salary') is not null
   drop table t_salary
go
create table t_salary
(salID int NOT NULL,--薪水ID
 mDate int NOT NULL,--月份
 salary Money NOT NULL,--基本工资
 bonus Money  NOT NULL,--奖金
 empID INT NOT NULL,--外键
 constraint PK_salary PRIMARY KEY(salID)
)
GO
if object_id('t_employee') is not null
   drop table t_employee
go
create table t_employee
(empID int NOT NULL,
 empCode varchar(10) NOT NULL,
 empName Nvarchar(20) NOT NULL,
 empSex  Nvarchar(1)  NOT NULL,
 empBirthday Date     NOT NULL,
 empWork     Bit      NOT NULL,
 deptID      INT      NOT NULL,
constraint PK_employee PRIMARY KEY(empID)
)
GO
if object_id('t_department') is not null
   drop table t_department
go
create table t_department
(deptID    INT   NOT NULL,
 deptCode   varchar(20)  NOT NULL,
 deptName   Nvarchar(20)  NOT NULL,
 deptCategory  Varchar(10)   NOT NULL,
constraint PK_department PRIMARY KEY(deptID)

)
if object_id('t_workOvertime') is not null
   drop table t_workOvertime
go
create table t_workOvertime
(workID   INT NOT NULL,
 mDate    INT NOT NULL,
 wotHour  INT NOT NULL,
 empID    INT NOT NULL,
constraint PK_workOvertime PRIMARY KEY(workID)
)
alter table dbo.t_salary
add constraint FK_salary_employee FOREIGN KEY(empid) REFERENCES t_employee(empid);
alter table dbo.t_employee
add constraint FK_employee_department FOREIGN KEY(deptID) REFERENCES t_department(deptID);
alter table dbo.t_workOvertime
add constraint FK_workOVertime_employee FOREIGN KEY(empID) REFERENCES t_employee(empID);
︿ 1
--第一题,按月汇总查询各部门的工资合计
SELECT
A.mDate AS 月份,
C.deptID AS 部门编码,
C.deptName AS 部门名称,
SUM (isnull(A.salary, 0) + isnull(A.bonus,0)) as 部门合计工资
from t_salary as A,t_employee as B,t_department as C
where A.empID = B.empID and B.deptID = C.deptID
group by A.mDate,C.deptID,C.deptName
︿ 1
--4、按月汇总查询各部门类别的工资合计,要求结果如下:
-- 月份 部门类别(销售/技术/管理)  合计工资

 select xs.mDate,bm.deptCategory, SUM(salary+bonus)as TotalMoney 
from t_salary as xs left join t_employee as emp
 on xs.empID=emp.EmpID
 left join t_department as bm
 on bm.depID = emp.depID
 group by  xs.mDate,bm.deptCategory
︿ 1
--第一题,按月汇总查询各部门的工资合计
SELECT
month(A.mDate) AS 月份,
C.deptID AS 部门编码,
C.deptName AS 部门名称,
SUM (isnull(A.salary, 0) + isnull(A.bonus,0)) as 部门合计工资
from t_salary as A,t_employee as B,t_department as C
where A.empID = B.empID and B.deptID = C.deptID
group by month(A.mDate),C.deptID,C.deptName

--按季度汇总
SELECT
datename(quarter,A.mDate) AS 月份,
C.deptID AS 部门编码,
C.deptName AS 部门名称,
SUM (isnull(A.salary, 0) + isnull(A.bonus,0)) as 部门合计工资
from t_salary as A,t_employee as B,t_department as C
where A.empID = B.empID and B.deptID = C.deptID
group by datename(quarter,A.mDate),C.deptID,C.deptName
︿ 0
WITH t_salary (salID ,mDate,salary,bonus,empID) 
AS( SELECT 1,201501 ,800,100,001
UNION ALL  SELECT 2,201502,900,200,002
UNION ALL  SELECT 3,201503,700,300,003 
UNION ALL  SELECT 4,201504,600,400,004 
UNION ALL  SELECT 5,201501,500,100,005 
UNION ALL  SELECT 6,201502,600,200,006 
UNION ALL  SELECT 7,201503,700,300,007 
UNION ALL  SELECT 8,201504,900,400,008  ) ,
t_employee (empID,empCode,empName,empSex,empBirthday,empWork,deptID)
AS(SELECT 001,N'A001',N'员工一',N'男','19910101',0,10
UNION ALL  SELECT 002,N'A002',N'员工二',N'女','19910101',0,10
UNION ALL  SELECT 003,N'A003',N'员工三',N'男','19910101',0,10
UNION ALL  SELECT 004,N'A004',N'员工四',N'女','19910101',0,20
UNION ALL  SELECT 005,N'A005',N'员工五',N'男','19910101',0,20
UNION ALL  SELECT 006,N'A006',N'员工六',N'男','19910101',0,20
UNION ALL  SELECT 007,N'A007',N'员工七',N'男','19910101',0,30
UNION ALL  SELECT 008,N'A008',N'员工八',N'女','19910101',1,30  ),
t_department (deptID,deptCode,deptName,deptCategory)
AS(SELECT 10,N'D10', N'技术部',N'负责技术'
UNION ALL SELECT 20,N'D10', N'销售部',N'负责销售'
UNION ALL SELECT 30,N'D10', N'管理部',N'负责管理'),
t_workOvertime (workID,mDate,wotHour,empID)
AS(SELECT 1,201501,2,1)

/* --第一题
SELECT x.mDate 月份,x.deptCode 部门编号,x.deptName 部门名称,SUM(x.salary)+SUM(isnull(x.bonus,0)) 部门工资合计
FROM (
SELECT ts.mDate,ts.empID,ts.salary,ts.bonus,td.deptCode,td.deptName FROM t_employee te
LEFT JOIN t_salary ts
ON te.empID=ts.empID
LEFT JOIN  t_department td
ON  te.deptID=td.deptID )x
GROUP BY x.mDate,x.deptCode,x.deptName */

/* --第二题
SELECT x.jd 季度,x.deptCode 部门编号,x.deptName 部门名称,SUM(x.salary)+SUM(isnull(x.bonus,0)) 部门工资合计
FROM (
 SELECT case when substring(convert(VARCHAR(6),ts.mDate,112),5,2) IN ('01','02','03') THEN  N'第一季度'
             when substring(convert(VARCHAR(6),ts.mDate,112),5,2) IN ('04','05','06') THEN  N'第二季度'
             when substring(convert(VARCHAR(6),ts.mDate,112),5,2) IN ('07','08','09') THEN  N'第三季度' 
         ELSE N'第四季度'  end jd  ,
 ts.empID,ts.salary,ts.bonus,td.deptCode,td.deptName FROM t_employee te
LEFT JOIN t_salary ts
ON te.empID=ts.empID
LEFT JOIN  t_department td
ON  te.deptID=td.deptID )x
GROUP BY x.jd,x.deptCode,x.deptName */


/* --第三题
SELECT x.mDate 月份,x.deptCode 部门编号,x.deptName 部门名称,
 SUM(x.salary)+SUM(isnull(x.bonus,0)) 部门工资合计,
 convert(varchar(10),Convert(numeric(9,2),(SUM(x.salary)+SUM(isnull(x.bonus,0)))*1.0/(SELECT SUM(salary)+SUM(isnull(bonus,0)) FROM t_salary))*100)+'%' 占比总工资
FROM (
SELECT ts.mDate,ts.empID,ts.salary,ts.bonus,td.deptCode,td.deptName FROM t_employee te
LEFT JOIN t_salary ts
ON te.empID=ts.empID
LEFT JOIN  t_department td
ON  te.deptID=td.deptID )x
GROUP BY x.mDate,x.deptCode,x.deptName */

/* --第四题
SELECT x.mDate,x.deptName,SUM(x.salary)+ SUM(ISNULL(bonus,0)) 工资合计
FROM (
SELECT ts.mDate,ts.empID,ts.salary,ts.bonus,td.deptCode,td.deptName FROM t_employee te
LEFT JOIN t_salary ts
ON te.empID=ts.empID
LEFT JOIN  t_department td
ON  te.deptID=td.deptID
)x GROUP BY x.mDate,x.deptName
ORDER BY CAST (x.mDate AS INT) */

/* --第五题
SELECT x.mDate,x.deptName,SUM(x.salary)+ SUM(ISNULL(bonus,0)) 工资合计,
convert(varchar(10),Convert(numeric(9,2),(SUM(x.salary)+SUM(isnull(x.bonus,0)))*1.0/(SELECT SUM(salary)+SUM(isnull(bonus,0)) FROM t_salary))*100)+'%' 占比总工资
FROM (
SELECT ts.mDate,ts.empID,ts.salary,ts.bonus,td.deptCode,td.deptName FROM t_employee te
LEFT JOIN t_salary ts
ON te.empID=ts.empID
LEFT JOIN  t_department td
ON  te.deptID=td.deptID
)x GROUP BY x.mDate,x.deptName  */

/* -- 第六题
SELECT a1.年,a1.男工资合计,a3.男平均工资,a2.女工资合计,a4.女