我想通过startDate对列进行求和。共有3,213行。
我希望并期望只获得51行。
如果我使用它,我得到3,213但不是每个StartDate总结的。因此51行。
SELECT SwitchID as S,
PortIndex as P,
SUM(BandwidthIn) as sum1,
SUM(BandwidthOut) as sum2,
SUM(BandwidthInMbps) as sum3,
SUM(BandwidthOutMbps) as sum4,
StartDate,
EndDate,
'day' as D
FROM dbo.BandwidthLogCalculatedTest
WHERE ( StartDate < CAST(DATEADD(DAY, -1, GETDATE()) AS DATETIME) )
AND (EntryType = 'Second' )
GROUP BY StartDate,
EndDate,
SwitchID,
PortIndex
例如(显示3,213行中的3行):
S P sum1 sum2 sum3 sum4 StartDate EndDate D
8 1 2184 821 0.00 0.00 2016-08-29 17:00:30.810 2016-08-29 17:01:00.827 day
8 2 0 2 0.00 0.00 2016-08-29 17:00:30.810 2016-08-29 17:01:00.827 day
8 3 621 598 0.00 0.00 2016-08-29 17:00:30.810 2016-08-29 17:01:00.827 day
如果使用这个,我得到正确的行数,但没有Switchid, PortIndex,StartDate,Enddate和&#39; day&#39;我也需要的名称。
SELECT SUM(BandwidthIn) as BandwidthIn,
SUM(BandwidthOut) as BandwidthOut,
SUM(BandwidthInMbps) as BandwidthInMbps,
SUM(BandwidthOutMbps) as BandwidthOutMbps,
'day' as EngtryType
FROM dbo.BandwidthLogCalculatedTest
WHERE ( StartDate < CAST(DATEADD(DAY, -1, GETDATE()) AS DATETIME) )
AND ( EntryType = 'Second' )
GROUP BY StartDate,
EndDate
例如(显示51行中的2行):
BandwidthIn BandwidthOut BandwidthInMbps BandwidthOutMbps EntryType
429688 625227 98.00 150.00 day
497928 688985 113.00 167.00 day
答案 0 :(得分:1)
听起来你期望的输出与你想要的目的不符。这个目的似乎是按天计算带宽,在这种情况下,Switch_id
和PortIndex
的分组会以您不想要的方式分割您的数据,除非每个StartDate
/ {{1 }}组合只有EndDate
和Switch_id
的每个值。
如果每个PortIndex
/ StartDate
组合只有一个值EndDate
和Switch_id
,则您的第一个查询将返回您期望的51行,并且您可以选择{ {1}}和PortIndex
。但是,如果每个Switch_id
/ PortIndex
组合具有多个StartDate
和EndDate
值,您将获得更多行,因为它正在寻找所有四个字段的唯一组合。
如果我正确理解您的意图,您只需将Switch_id
和PortIndex
的第一个查询更改为分组。由于您要对StartDate
和EndDate
值进行求和,因此无法选择这些变量。
代码将是:
Switch_id