【问题标题】:Calculating Horizontal Totals in Pivot in MS SQL Server 2008在 MS SQL Server 2008 的 Pivot 中计算水平总计
【发布时间】: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 猜到您想要总计,这就是为什么我建议明确说“一排”。

标签: sql sql-server pivot subtotal


【解决方案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 查询是非常基本的.. 所以如果您能详细说明您尝试应用于您自己的查询和预期结果的条件,那就太好了。
    • 我正在尝试获取枢轴的水平小计。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多