在 MS SQL Server 2008 的 Pivot 中计算水平总计
Posted
技术标签:
【中文标题】在 MS SQL Server 2008 的 Pivot 中计算水平总计【英文标题】:Calculating Horizontal Totals in Pivot in MS SQL Server 2008 【发布时间】:2013-01-29 17:31:28 【问题描述】:我想知道如何计算行小计。
我的桌子是这样的:
FCode DMAR15 DMAR02 DMAR13 DMAR06
F83006 292 334 111 152
F83025 272 298 80 140
F83048 166 179 56 57
F83049 27 32 15 17
F83050 105 112 45 53
F83635 139 153 41 41
我的脚本是:
SELECT [FCode],
[DMAR15],
[DMAR02],
[DMAR13],
[DMAR06],
[PCVDR41],
[PCVDR42],
[CLDP031],
[CLDP003],
[CLDP012],
[CLDP028],
[CLDP023],
[CLDP021],
[CLDP016],
[CLDP022]
FROM (SELECT [FCode],
[Aggregate],
[QName]
FROM [dbo].[tblMiquestResults]
WHERE AuditDate = '2012-09-30') AS SourceTable
PIVOT (AVG (Aggregate) FOR [QName] IN ([DMAR15], [DMAR02], [DMAR13],
[DMAR06], [PCVDR41], [PCVDR42],
[CLDP031], [CLDP003], [CLDP012],
[CLDP028], [CLDP023], [CLDP021],
[CLDP016], [CLDP022])) AS P
我想让它看起来像这样:
FCode DMAR15 DMAR02 DMAR13 DMAR06
F83006 292 334 111 152
F83025 272 298 80 140
F83048 166 179 56 57
F83049 27 32 15 17
F83050 105 112 45 53
F83635 139 153 41 41
Total 1001 1108 348 460
【问题讨论】:
您能否展示您的查询应该在其上运行的示例数据? “水平总计”有点不清楚;你的总数是水平的,但每个总数都是垂直的。 “一整行”不会那么模棱两可。 我正在尝试在数据透视表中包含总计。 是的,但一次可以跨越、向下或两者兼而有之。 bonCondigo 猜到您想要总计,这就是为什么我建议明确说“一排”。 【参考方案1】:一种方法
SELECT CASE WHEN GROUPING([FCode]) = 1 THEN 'Total' ELSE [FCode] END AS [FCode],
SUM([DMAR15]) AS DMAR15,
SUM([DMAR02]) AS [DMAR02]
/*TODO: Rest of columns*/
FROM (SELECT [FCode],
[Aggregate],
[QName]
FROM [tblMiquestResults]) AS SourceTable
PIVOT (AVG (Aggregate) FOR [QName] IN ([DMAR15], [DMAR02], [DMAR13],
[DMAR06], [PCVDR41], [PCVDR42],
[CLDP031], [CLDP003], [CLDP012],
[CLDP028], [CLDP023], [CLDP021],
[CLDP016], [CLDP022])) AS P
GROUP BY GROUPING SETS ((FCode),())
SQL Fiddle
【讨论】:
【参考方案2】:鉴于您的上表(不查看您的查询),以下是执行rowsum
的查询。
SQLFIDDLE DEMO
select a.fcode, a.DMAR15, a.DMAR02,
a.DMAR13, a.DMAR06, (a.DMAR15 + a.DMAR02 +
a.DMAR13 + a.DMAR06) as RowSum
from demo a
;
| FCODE | DMAR15 | DMAR02 | DMAR13 | DMAR06 | ROWSUM |
-------------------------------------------------------
| F83006 | 292 | 334 | 111 | 152 | 889 |
| F83025 | 272 | 298 | 80 | 140 | 790 |
| F83048 | 166 | 179 | 56 | 57 | 458 |
| F83049 | 27 | 32 | 15 | 17 | 91 |
| F83050 | 105 | 112 | 45 | 53 | 315 |
| F83635 | 139 | 153 | 41 | 41 | 374 |
【讨论】:
@KaisMalique Thsi 查询是非常基本的.. 所以如果您能详细说明您尝试应用于您自己的查询和预期结果的条件,那就太好了。 我正在尝试获取枢轴的水平小计。谢谢。以上是关于在 MS SQL Server 2008 的 Pivot 中计算水平总计的主要内容,如果未能解决你的问题,请参考以下文章
在 MS SQL Server 2008 的 Pivot 中计算水平总计
将表从 SQL Server 2008 复制到 MS Access 2007