【问题标题】:SQL Server: SUM multiple rows depending on a conditonSQL Server:根据条件对多行求和
【发布时间】:2017-12-11 21:25:44
【问题描述】:

我的桌子是这样的(我在一家能源公司工作)

dte             hub            Peak            Offpeak
07-04-2017      SoCo           36.19           18.23
07-04-2017      SwapBID        0.5             0.25
07-05-2017      SoCo           32.12           21.72
07-05-2017      SwapBID        0.25            0.25
07-06-2017      SoCo           33.87           20.34
07-06-2017      SwapBID        0.5             0.5 

我希望能够使用选择查询从该表中提取数据,并使其在同一天将两个中心的高峰和非高峰价格相加。例如,在 2017 年 7 月 4 日这一天,我希望它显示峰值为 36.69,非峰值为 18.48。我想在桌子上的每一天都这样做。如何编码?

【问题讨论】:

  • 使用该示例数据,预期结果是什么 - 作为格式化文本?
  • 您应该发布您尝试过的内容以及您所做的任何研究。

标签: sql sql-server conditional select-query


【解决方案1】:

您正在寻找聚合group by

试试:

create table #t(dte date,hub varchar(100),Peak float,Offpeak float)
insert into #t values
('07-04-2017','SoCo',36.19,18.23),
('07-04-2017', 'SwapBID',0.5,0.25),
('07-05-2017','SoCo',32.12,21.72),
('07-05-2017','SwapBID',0.25,0.25),
('07-06-2017', 'SoCo,33.87,20.34),
('07-06-2017', 'SwapBID',0.5,0.5 )

select dte,
sum(Peak) as total_peak,
sum(Offpeak) as total_offpeak
 from #t
group by dte

【讨论】:

    【解决方案2】:

    只需按日期汇总您的表格并将峰值和非峰值值相加:

    SELECT
        dte,
        SUM(Peak) AS Peak,
        SUM(Offpeak) AS Offpeak
    FROM yourTable
    GROUP BY dte
    

    如果给定日期可能有多个 hub 类型,但我们只想考虑 SoCoSwapBID 集线器,那么我们可以考虑在查询中添加 WHERE 子句:

    WHERE hub IN ('SoCo', 'SwapBID')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 2021-06-28
      • 2020-03-05
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多