0

私は自分のデータを月に対してピボットすることに成功しました。ただし、ピボットは KPIData テーブルに値を持つ行のみを返します。

Months を KPIData に対してピボットし、フィルタリングのために KPIGraph からいくつかのフィールドを取り込みます。KPIGraphs 行を追加し、KPIData に関連するレコードがないときはいつでも、各月の列の行に null を表示できるようにしたいと考えています。現時点では、これは KPIData テーブルに少なくとも 1 つの値を追加した場合にのみ機能します。もちろん、結合によりすべてがリンクされます。

関係は次のように設定されています: http://goo.gl/9lvhF

いくつか読んだところ、ここでクロス結合を使用する必要があることがわかりましたか? 私はこれらのいずれかを使用したことがなく、さらに掘り下げた後、ピボット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

これに関するヘルプをいただければ幸いです。

4

1 に答える 1

0

さらにいじった直後にこれを解決することができました。私のサブクエリでは、Null を確実に戻すために RIGHT OUTER JOIN が必要でした。これらは、Pivo​​t コードが機能するようになると、私の月全体に拡張されます。

                      dbo.KPIDatas AS t0 RIGHT OUTER JOIN
于 2012-09-21T10:53:33.710 に答える