我成功地将我的数据转化为数月。但是,pivot仅返回在我的KPIData表中具有值的行。
我正在针对KPIData转动几个月,并从KPIGraph引入一些字段进行过滤。每当我添加KPIGraphs行并且KPIData中没有相关记录时,我希望能够在每个月的列中显示空值。目前,只有在我的KPIData表中添加至少1个值时才会有效,然后由于连接而将所有内容链接在一起。
关系设定如下: http://goo.gl/9lvhF
我做了一些阅读,发现我需要在这里使用交叉连接?我从来没有使用其中的一个,经过一些进一步的挖掘,它完全混淆了我在我的pivot 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 :(得分:0)
管理好解决这个问题后再解决这个问题。我的子查询需要一个RIGHT OUTER JOIN来确保它撤回Null。然后,在我的几个月里,当Pivot代码进入游戏时,它们会被扩展出来。
dbo.KPIDatas AS t0 RIGHT OUTER JOIN