【问题标题】:T-sql :get SUM of ColumnsT-sql:获取列的总和
【发布时间】:2017-12-09 06:14:14
【问题描述】:

我有一个如下所示的表格:

          W1  W2 w3
Gold      10    2    3              
Silver     3    1    1

但我需要一个结果:

          W1  W2  w3
Gold      10  12  15            
Silver     3  4  5

有什么办法可以得到这个结果吗?

我的sql查询:

SELECT  
   week1=[1],week2=[2],week3=[3]
FROM
(
    SELECT
    [week]=DATEPART(ISO_WEEK,ta.enddate),ta.id
    FROM
    table1 ta where ta.enddate BETWEEN '2016/01/01' AND '2016/12/31'
) src
PIVOT
(
    SUM(id) FOR week IN ( 
        [1],[2],[3])
) piv

【问题讨论】:

  • 在 Reporting Services 中,您可以使用运行值函数进行所需的测试
  • 嗨法比奥,是的,这就是我想要的,但它不适合我。

标签: sql tsql reporting-services


【解决方案1】:

这是你想要的吗?

select t.??, t.w1, (t.w1 + t.w2) as w2, (t.w1 + t.w2 + t.w3) as w3
from table1 t;

我不知道第一列的名称是什么,所以我只使用了??

【讨论】:

    【解决方案2】:

    一个想法,因为您使用 Reporting Services 标记了这个问题。最后,如果您使用 Reporting Services 显示信息,我会高度考虑使用 Matrix 工具对数据进行透视和求和,因为这正是它所做的。

    进一步解释您似乎将使用 SSRS。您的矩阵将有一个类似于此的数据集:

    SELECT
       [week]=DATEPART(ISO_WEEK,ta.enddate),
       ta.id,
       ta.MetalType as GoldorSilver
    FROM  table1 ta 
    where ta.enddate BETWEEN '2016/01/01' AND '2016/12/31'
    

    该矩阵将具有页眉和页脚,列组将是 [Week],列组总计将在一周内进行总和。行组页脚将计算所有周的总和。

    【讨论】:

    • 你好 Jesse,但我可以对整行(所有周)使用求和,而不仅仅是我所在的那一周?
    • 如果我理解正确,那么是的。您将让矩阵的数据集仅列出周数和每人的奖牌数,然后让矩阵具有组页眉和页脚。页脚将计算所有星期,列组总和将计算整个星期的总和。
    • 但是我想要的总和只是整个星期,或者所有周。相反,如果列是第 1 周(总和第 1 周),如果列是第 2 周(总和(第 1 周+ week2)) 我的专栏不是动态的。
    • 两者。一个是列组摘要(跨周),一个是行组摘要(跨所有周)。
    • 这是一个关于如何使用 Matrix 对象的好视频。 youtube.com/watch?v=zERexbgCG5A
    【解决方案3】:

    在透视数据之前计算总和

    SELECT element, 
           week1=[1],week2=[2],week3=[3]
    FROM
    (
    SELECT [week] = DATEPART(ISO_WEEK,ta.enddate),
           price = sum(ta.price)Over(Partition by element Order by enddate),
           element  
    FROM table1 ta 
    where ta.enddate BETWEEN '2016/01/01' AND '2016/12/31'
    ) src
    PIVOT
    (
     SUM(price) FOR week IN ( [1],[2],[3])
    ) piv
    

    对于旧版本

    SELECT element, 
           week1=[1],week2=[2],week3=[3]
    FROM
    (
    SELECT [week] = DATEPART(ISO_WEEK,ta.enddate),
           cs.price,
           element  
    FROM table1 ta 
    cross apply(select sum(price) from table1 tb 
                where ta.element = tb.element and ta.enddate >= tb.enddate ) cs (price)
    where ta.enddate BETWEEN '2016/01/01' AND '2016/12/31'
    ) src
    PIVOT
    (
     SUM(price) FOR week IN ( [1],[2],[3])
    ) piv
    

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 2013-08-07
      • 2016-09-24
      • 2011-04-01
      • 2015-05-07
      相关资源
      最近更新 更多