您好我想将第5列添加为"离开",我通过此查询获得以下结果
Empname Deptname LeaveType TotalLeave
------------------------------------------------
Andrew CSE SickLeave 3
George IT CasualLeave 1
Andrew CSE CasualLeave 2
George IT SickLeave 2
这是我的查询
Select EmployeeDetails.Empname,
DepartmentDetails.Deptname ,
LeaveApplication.LeaveType,
Sum(LeaveApplication.NoOfDays) As TotalLeave
From DepartmentDetails
Inner JOIN EmployeeDetails on EmployeeDetails.DeptID = DepartmentDetails.DeptID
INNER JOIN LeaveApplication On EmployeeDetails.EmpID = LeaveApplication.EmpID
Where LeaveApplication.LeaveFromDate >='2017-01-01'
AND LeaveApplication.LeaveFromDate <='2017-05-31'
and EmployeeDetails.Status=0
and LeaveApplication.leavetype not in ('Forgot Access Card','Permission','Work from Home','Holiday Allowance/Weekend Allowance','On Duty','Night Shift Allowance')
and LeaveApplication.LeaveStatus<>'Rejected'
GROUP BY LeaveApplication.EmpID ,DepartmentDetails.Deptname,EmployeeDetails.Empname,LeaveApplication.LeaveType
需要的结果
Empname Deptname LeaveType TotalLeave
-----------------------------------------------------------
Andrew CSE SickLeave-3,Casual-2 5
George IT CasualLeave-1,Sickleave-2 3
答案 0 :(得分:1)
--Try This
BEGIN TRAN
CREATE TABLE #Detail( Empname NVARCHAR(50),Deptname NVARCHAR(50),LeaveType NVARCHAR(100),Leave INT )
------------------------------------------------
INSERT INTO #Detail
Select 'Andrew' ,'CSE','SickLeave',3 UNION ALL
SELECT 'George','IT','CasualLeave',1 UNION ALL
Select 'Andrew','CSE','CasualLeave',2 UNION ALL
SELECT 'George','IT','SickLeave',2
SELECT
c.Empname,c.Deptname,
STUFF((
SELECT ', ' + CONVERT(Nvarchar,CP.LeaveType)
from
#Detail CP
WHERE
C.Empname = CP.Empname
FOR XML PATH('')), 1, 2, '') LeaveType,sum(Leave)Total_Leave
FROM
#Detail C
GROUP BY Empname,Deptname
ROLLBACK TRAN
答案 1 :(得分:1)
使用STUFF和SUM内置函数:
CREATE TABLE #table1(Empname VARCHAR(20), Deptname VARCHAR(20),LeaveType
VARCHAR(20), TotalLeave INT)
INSERT INTO #table1(Empname , Deptname ,LeaveType , TotalLeave)
SELECT 'Andrew','CSE','SickLeave',3 UNION ALL
SELECT 'George','IT','CasualLeave',1 UNION ALL
SELECT 'Andrew','CSE','CasualLeave',2 UNION ALL
SELECT 'George','IT','SickLeave',2
SELECT Empname , Deptname , STUFF( (SELECT ',' + LeaveType FROM #table1 I2
WHERE I2.Empname = I1.Empname FOR XML PATH('')),1,1,'') LeaveType ,
SUM(TotalLeave) TotalLeave
FROM #table1 I1
GROUP BY Empname , Deptname