2014-01-13 3 views
1

다른 where 절을 기반으로 동일한 열의 합계를 반환하려면이 select 쿼리가 필요합니다. 기본적으로 이러한 여러 선택 쿼리를 병합하는 방법을 찾고 있습니다. 아래를 봐주세요. 어떤 도움이라도 대단히 감사합니다!동일한 열에서 여러 합계

DECLARE @prEndDate smalldatetime 
SET @prEndDate='2014-01-05' 

SELECT Employee, SUM(Amount) as Deduction 
FROM bPRDT 
WHERE [email protected] 
AND EDLCode=100 AND EDLType='D' 
GROUP BY Employee 

SELECT Employee, SUM(Amount) as DeductionPlus 
FROM bPRDT 
WHERE [email protected] 
AND EDLCode=101 AND EDLType='D' 
GROUP BY Employee 

SELECT Employee, SUM(Amount) as Match 
FROM bPRDT 
WHERE [email protected] 
AND EDLCode=600 AND EDLType='L' 
GROUP BY Employee 

SELECT Employee, SUM(Amount) as MatchPlus 
FROM bPRDT 
WHERE [email protected] 
AND EDLCode=601 AND EDLType='L' 
GROUP BY Employee 

마지막으로 수정되었습니다. 당신은 UNION 또는 CASE WHEN 절을 사용할 수

DECLARE @prEndDate smalldatetime 
SET @prEndDate ='2013-12-29' 
SELECT 
REPLACE(c.SSN,'-',''), 
SUM(CASE WHEN a.EDLType='D' AND a.Amount > 0 AND (a.EDLCode=100 OR a.EDLCode=101) THEN a.Amount ELSE 0 END) AS Deferral, 
SUM(CASE WHEN a.EDLType='L' AND a.Amount > 0 AND (a.EDLCode=600 OR a.EDLCode=601) THEN a.Amount ELSE 0 END) AS EmployerMatch, 
SUM(CASE WHEN a.EDLType='D' AND a.Amount > 0 AND (a.EDLCode=100 OR a.EDLCode=101) THEN a.SubjectAmt ELSE 0 END) AS Compensation415, 
SUM(CASE WHEN a.EDLType='D' AND a.Amount > 0 AND (a.EDLCode=100 OR a.EDLCode=101) THEN a.SubjectAmt ELSE 0 END) AS PlanFullYearCompensation, 
SUM(CASE WHEN a.EDLType='E' AND a.Amount > 0 AND (a.EDLCode=1 OR a.EDLCode=2 OR a.EDLCode=3) THEN a.Hours ELSE 0 END) AS PlanHours 
FROM bPRDT a 
JOIN (SELECT DISTINCT SSN, Employee FROM bPREH) c ON a.Employee=c.Employee  
WHERE [email protected] 

GROUP BY c.SSN 
ORDER BY Deferral DESC, c.SSN ASC 
+0

[UNION] (http://www.w3schools.com/sql/sql_union.asp)을 확인하십시오. –

답변

0

: 여기 존재를 결국거야.

SELECT 
     Employee, 
     SUM(CASE WHEN EDLCode=100 AND EDLType='D' THEN Amount ELSE 0 END) as Deduction, 
     SUM(CASE WHEN EDLCode=101 AND EDLType='D' THEN Amount ELSE 0 END) as DeductionPlus 
     SUM(CASE WHEN EDLCode=600 AND EDLType='L' THEN Amount ELSE 0 END) as Match 
     SUM(CASE WHEN EDLCode=601 AND EDLType='L' THEN Amount ELSE 0 END) as MatchPlus 
FROM bPRDT 
WHERE [email protected] 
GROUP BY Employee 
+0

대단히 감사합니다! 완벽하게 일했습니다. – user3191188

+0

Where 절에 의해 무시되고있는 것 같습니다. 왜 그런가? 나는 심지어 PREEndDate = @ prEndDate를 CASE WHEN 절에 삽입하려고 시도했다. 단순히 무시하고 의도 한대로 작동합니다. 흠 .. – user3191188

+0

잘 선언과 @preenddate의 집합이 추가되어야합니다 (하지만 당신이 해냈어?). –

0

당신은 CASE 문에 WHERE 절에서하고있는 상태를 이동할 수 있습니다, 그래서 당신은 관심 행을 요약하면 : 직원, EDLCode, 대신 EDLType에 의해

DECLARE @prEndDate smalldatetime 
SET @prEndDate='2014-01-05' 

SELECT Employee, 
     SUM(CASE WHEN EDLCode=100 AND EDLType='D' THEN amount ELSE 0 END) 
      AS Deduction, 
     SUM(CASE WHEN EDLCode=101 AND EDLType='D' THEN amount ELSE 0 END) 
      AS DeductionPlus, 
     SUM(CASE WHEN EDLCode=600 AND EDLType='L' THEN amount ELSE 0 END) 
      AS Match, 
     SUM(CASE WHEN EDLCode=601 AND EDLType='L' THEN amount ELSE 0 END) 
      AS MatchPlus 
FROM  bPRDT 
WHERE PREndDate = @prEndDate 
GROUP BY Employee 
0

그룹 그냥 직원.

관련 문제