【问题标题】:Sum of column values in Pivot table数据透视表中的列值总和
【发布时间】:2014-11-26 06:29:23
【问题描述】:

我有一张包含以下详细信息的表格:

表格:ftest

create table ftest
(
  cola varchar(10),
  colb varchar(10)
)

插入记录

insert into ftest values('A10','JK1');
insert into ftest values('A10','JK2');
insert into ftest values('A10','JK3');
insert into ftest values('A10','JK4');
insert into ftest values('A10','JK1');

数据透视表脚本

select cola,JK1,JK2,JK3,JK4
from 
(
  select cola,colb 
  from ftest
)p
pivot
(
    count(colb)
    for colb in (JK1,JK2,JK3,JK4)
) as pvt;

获取结果

cola  JK1  JK2  JK3  JK4
------------------------
A10    2    1    1    1

预期结果

我想对所有列 JK1,JK2,JK3,JK4 的值求和,并将其分配给 SUM 列。

cola  JK1  JK2  JK3  JK4  SUM
-----------------------------
A10    2    1    1    1    5

【问题讨论】:

    标签: sql-server sql-server-2008-r2 pivot


    【解决方案1】:

    有几种不同的方法可以获得总计列。

    您可以将每一列添加到最终选择列表中:

    select cola,JK1,JK2,JK3,JK4, 
      Total = JK1+JK2+JK3+JK4
    from 
    (
      select cola,colb
      from ftest
    )p
    pivot
    (
      count(colb)
      for colb in (JK1,JK2,JK3,JK4)
    ) as pvt;
    

    Demo

    或者您可以使用像COUNT() OVER() 这样的窗口函数来获取每个cola 分区的总数:

    select cola,JK1,JK2,JK3,JK4, Total
    from 
    (
      select cola,colb,
        Total = count(*) over(partition by cola)
      from ftest
    )p
    pivot
    (
      count(colb)
      for colb in (JK1,JK2,JK3,JK4)
    ) as pvt;
    

    Demo。两者都给出以下结果:

    | COLA | JK1 | JK2 | JK3 | JK4 | TOTAL |
    |------|-----|-----|-----|-----|-------|
    |  A10 |   2 |   1 |   1 |   1 |     5 |
    

    【讨论】:

    • 太棒了!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 2020-12-05
    • 2017-07-16
    相关资源
    最近更新 更多