2013-11-22 4 views
1

Microsoft SQL Server 2008 R2를 사용하여 12 개의 쿼리의 월간 데이터를 1 개의 쿼리 및 결과 테이블에 재귀 적으로 결합하려고합니다. 쿼리를 12 번 작성하고 각 쿼리에 참여하면 결과에 참여하는 방법을 알지만 쿼리는 이미 16 행이므로 반복적으로 처리 할 방법을 찾고 있습니다.Microsoft SQL Server - 재귀 조인

나는 영업 예를 사용합니다 : 나는 다음 (고화질) 다음 쿼리와

sales(ID int, EmpID int, dt datetime, amount numeric(5,2)). 

와 테이블이
을, 내가 어떻게 할 수다는 EmpID와 함께 그들을 모두 가입 어떻게, 12 표를 얻을 수 나는 월/년과 열 머리글 이름 :

DECLARE @mo INT, @yr INT 
SET @mo = 1 
SET @yr = YEAR(GETDATE()) 
WHILE (@mo < 13) 
BEGIN 
    SELECT EmpID, SUM(numeric) AS Totals WHERE MONTH(dt) = @mo AND YEAR(dt) = @yr GROUP BY EmpID 
    SET @mo = @mo + 1 
END 

내가 할 결과를 원하는 뭔가 같은 :

EmpID  1-2012  2-2012 ... 12-2012 
-----  ------- -------   ------- 
1   XXXX.XX XXXX.XX   XXXX.XX 
... 
100  XXXX.XX XXXX.XX   XXXX.XX 
+0

더 많은 정보를 제공 할 수 있습니까? 12 개 테이블의 출처를 이해하지 못합니다. – Juan

답변

1

재귀 공통 테이블 식에 대해 읽을 수 있습니다. EG :

;WITH Months AS 
(
    SELECT 1 as [Month] 

    UNION ALL 

    SELECT [Month] + 1 
    FROM Months 
    WHERE [Month] + 1 < 13 
), 
SELECT [Month] 
FROM Months 

하지만 피벗 연산자를 찾고 있다고 생각합니다. EG 다음 SQLFiddle 예를 here 밖으로

;WITH SalesByMonth AS (
    SELECT 
     EmpID 
    ,MONTH(dt) AS Month 
    ,SUM(Amount) AS Total 
    FROM 
     @sales 
    WHERE 
     YEAR(dt) = @Year 
    GROUP BY 
     EmpID 
    ,MONTH(dt) 
) 
SELECT 
    EmpID, [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12] 
FROM (
    SELECT 
    EmpID 
    ,Month 
    ,Total 
    FROM 
    SalesByMonth) up 
PIVOT (SUM(Total) FOR Month IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) AS pvt 
ORDER BY 
    EmpID 

확인합니다.