2012-09-21 2 views
0

수개월 동안 데이터를 성공적으로 피킹 할 수있었습니다. 그러나 피벗 내 KPIData 테이블에 값이있는 행을 반환합니다.레코드가 없어도 테이블 피벗에서 모든 행을 반환합니다 (교차 가입?)

필자는 KPIData에 대한 달 (Months)을 KPIGraph에서 가져오고 필터링을 위해 KPIGraph에서 일부 필드를 가져 왔습니다. KPIGraphs 행을 추가하고 KPIData에 관련된 레코드가 없을 때마다 매월 열에 null을 표시 할 수 있기를 원합니다. 현재 이것은 내 KPIData 테이블에 적어도 하나의 값을 더하는 경우에만 작동합니다. 그러면 조인으로 인해 모든 것이 링크됩니다. http://goo.gl/9lvhF

좀 읽어까지 다 내가 십자가 여기 조인을 사용 likey해야합니다 것으로 나타났습니다 다음과 같이

의 관계는 설정되어 있습니까? 나는 이것들 중 하나를 사용한 적이 없으며 몇 가지 더 파고 들자 마자 내 피벗 SQL에 그것의 구현을 완전히 혼란스럽게했다.

SELECT * 
FROM (
    SELECT [t0].[GraphID], CASE MonthID 
      WHEN 1 THEN 'October' 
      WHEN 2 THEN 'November' 
      WHEN 3 THEN 'December' 
      WHEN 4 THEN 'January' 
      WHEN 5 THEN 'February' 
      WHEN 6 THEN 'March' 
      WHEN 7 THEN 'April' 
      WHEN 8 THEN 'May' 
      WHEN 9 THEN 'June' 
      WHEN 10 THEN 'July' 
      WHEN 11 THEN 'August' 
      WHEN 12 THEN 'September' 
      END AS [Month], [t0].[Value], [t3].[Graph_Type], [t5].[Department], [t6]. 
     [Type], [t8].[Financial_Year], [t7].[FYID], [t4].[KPITypeID] 
    FROM [KPIDatas] AS [t0] 
    INNER JOIN [Months] AS [t1] ON [t1].[ID] = [t0].[MonthID] 
    INNER JOIN [KPIGraphs] AS [t2] ON [t2].[ID] = [t0].[GraphID] 
    INNER JOIN [GraphTypes] AS [t3] ON [t3].[ID] = [t2].[GraphTypeID] 
    INNER JOIN [KPIs] AS [t4] ON [t4].[ID] = [t2].[KPIID] 
    INNER JOIN [Departments] AS [t5] ON [t5].[ID] = [t4].[DeptID] 
    INNER JOIN [KPITypes] AS [t6] ON [t6].[ID] = [t4].[KPITypeID] 
    INNER JOIN [CSFs] AS [t7] ON [t7].[ID] = [t4].[CSFID] 
    INNER JOIN [FYs] AS [t8] ON [t8].[ID] = [t7].[FYID] 
    ) TableDate 
PIVOT(SUM(Value) FOR [Month] IN (
      [October], [November], [December], [January], [February], [March], [April] 
      , [May], [June], [July], [August], [September] 
      )) PivotTable 

이 문제에 대한 도움이 필요합니다.

+0

어떤 샘플 데이터로 [SQL Fiddle] (http://sqlfiddle.com/)을 만들 수 있습니까? 어떤 데이터도 보지 않고 생각할 수있는 유일한 방법은 CTE 또는 캘린더 테이블을 사용하여 가입 할 개월 목록을 만드는 것입니다. – Taryn

답변

0

더 많은 문제를 해결 한 직후이를 해결했습니다. 내 하위 쿼리는 Null을 다시 끌어 오기 위해 오른쪽 외부 조인이 필요했습니다. 그런 다음 피벗 코드가 재생되면서 내 달 동안 확장됩니다.

     dbo.KPIDatas AS t0 RIGHT OUTER JOIN 
관련 문제