【发布时间】:2013-06-26 11:24:31
【问题描述】:
我有一个生成如下结果的表:
Code Month Value
733 May 520.00
733 May 2250.00
733 May 125.00
我有一个要求,我需要在上面显示这样的记录:
Code May
733 520
733 2250
733 125
我可以通过 pivot 想到一种方法,所以我想:
Select
Code,
IsNull(January,0)[January(Actual)],
IsNull(February,0)[February(Actual)],
IsNull(March,0)[March(Actual)],
IsNull(April,0)[April(Actual)],
IsNull(May,0)[May(Actual)],
IsNull(June,0)[June(Actual)],
IsNull(July,0)[July(Actual)],
IsNull(August,0)[August(Actual)],
IsNull(September,0)[September(Actual)],
IsNull(October,0)[October(Actual)],
IsNull(November,0)[November(Actual)],
IsNull(December,0)[December(Actual)]
From
(
Select
Code,
[Month],
Value
From
#tempMonthWiseActualValue
)s
Pivot
(
min([Value] )
For [Month]
In (January,February,March,April,May,June,July,August,September,October,November,December)
)as pvt
Order by Code
但是有一个限制,因为我需要保留所有值,因此没有聚合函数可以在这里工作,即没有 MIN、MAX、SUM 等。使用 Min/Max 将在 value 列中给我 125 或 2250。
所以我的问题是:
有没有一种方法可以通过使用数据透视表找到所需的结果,或者我应该使用#temp 表吗?
【问题讨论】:
-
假设您在 5 月有 2 行,在 4 月有 2 行相同的代码:
1,May,10;1,May,20;1,Apr,30;1,Apr,40。计算机应该如何判断您想要的输出应该是:1,10 as May, 30 as Apr还是1,10 as May, 40 as Apr? -
当有其他月份的值时会发生什么?还是同一个月更多?您是否为每个原始条目创建一个新行?
-
由于月份的值与代码相关,因此它们在结果中的显示方式并不重要。对于最终结果,它可以是五月的 1,10、四月的 30 或五月的 1,10、四月的 40。
-
SQL Server 不理解,无法处理
does not matter命令。你应该确切地告诉你该怎么做。对相同数据的查询每次都应该产生相同的结果。如果一个月的数据比另一个多怎么办?看起来你需要 11 个OUTER JOINs...
标签: sql-server tsql