Sql 如何显示每个月的上一次总计以用于运行总计?

Sql 如何显示每个月的上一次总计以用于运行总计?,sql,sql-server,Sql,Sql Server,我试图在SQLServer中按月计算全年的运行总数。虽然代码成功地创建了运行总数,但每个月的每一天都会返回许多观察值,因为数据表由数百万个观察值组成,其中许多观察值发生在同一天 USE PIERS SELECT VDATE, SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in('LOS ANGELES') then TEUS end) over (order by VDATE rows

我试图在SQLServer中按月计算全年的运行总数。虽然代码成功地创建了运行总数,但每个月的每一天都会返回许多观察值,因为数据表由数百万个观察值组成,其中许多观察值发生在同一天

USE PIERS

SELECT
    VDATE,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in('LOS ANGELES') 
                then TEUS end) over (order by VDATE rows unbounded preceding) WC_LA,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in('LONG BEACH') 
                then TEUS end) over (order by VDATE rows unbounded preceding) WC_LB,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in('SEATTLE', 'TACOMA') 
                then TEUS end) over (order by VDATE rows unbounded preceding) WC_NWSA,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in('OAKLAND') 
                then TEUS end) over (order by VDATE rows unbounded preceding) WC_Oakland,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in('ABERDEEN WA', 'ANACORTES', 'ANCHORAGE', 'ASTORIA', 'BENICIA', 'COOS BAY', 'DUTCH HBR', 'EL SEGUNDO', 'EVERETT', 'JUNEAU', 'KALAMA', 'KETCHIKAN', 'KODIAK', 'LONGVIEW', 'MARCUS HOOK', 'MONTEREY', 'NEWPORT OR', 'PITTSBURG', 'PORT ANGELES', 'PORT TOWNSEND', 'PORTLAND OR', 'PT HUENEME', 'REDWOOD CY', 'SAN DIEGO', 'SAN FRANCISCO', 'STOCKTON', 'VANCOUVER WA')  
                then TEUS end) over (order by VDATE rows unbounded preceding) WC_Other,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in ('NEW YORK') 
                then TEUS end) over (order by VDATE rows unbounded preceding) EC_NYNJ,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in ('SAVANNAH')then TEUS end) over (order by VDATE rows unbounded preceding) EC_Savannah,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in ('NORFOLK') then TEUS end) over (order by VDATE rows unbounded preceding) EC_Norfolk,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in ('CHARLESTON') then TEUS end) over (order by VDATE rows unbounded preceding) EC_Charleston,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in ('BALTIMORE') then TEUS end) over (order by VDATE rows unbounded preceding) EC_Baltimore,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in ('JACKSONVILLE') then TEUS end) over (order by VDATE rows unbounded preceding) EC_Jacksonville,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in ('MIAMI') then TEUS end) over (order by VDATE rows unbounded preceding) EC_Miami,
    SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in ('PT EVERGLADES') then TEUS end) over (order by VDATE rows unbounded preceding) EC_Everglades
,SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in ('PHILADELPHIA') then TEUS end) over (order by VDATE rows unbounded preceding) EC_Philadelphia
,SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in ('ALBANY', 'BELFAST', 'BOSTON', 'BRIDGEPORT', 'BRUNSWICK', 'CHESTER PA', 'EASTPORT', 'ERIE', 'FALL RVR', 'FERNANDNA BCH', 'FT PIERCE', 'GLOUCESTER CY', 'HOPEWELL', 'MARTINEZ', 'MOREHEAD CY', 'NEW BEDFORD', 'NEW HAVEN', 'NEW LONDON', 'NEWPORT', 'NEWPORT NEWS', 'PAULSBORO', 'PENNSAUKEN', 'PERTH AMBOY', 'PLYMOUTH', 'PORTLAND ME', 'PROVIDENCE', 'PT CANAVERAL', 'RICHMOND VA', 'ROCHESTER', 'SALEM NJ', 'SEARSPORT', 'W PALM BCH', 'WILMINGTON DE', 'WILMINGTON NC') then TEUS end) over (order by VDATE rows unbounded preceding) EC_Other

,SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in('HOUSTON') then TEUS end) over (order by VDATE rows unbounded preceding) GC_Houston
,SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in('NEW ORLEANS') then TEUS end) over (order by VDATE rows unbounded preceding) GC_NO
,SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in('MOBILE') then TEUS end) over (order by VDATE rows unbounded preceding) GC_Mobile
,SUM(case when CONFLAG IN ('1', 'C', 'Y') AND USPORT in('AVONDALE', 'BATON ROUGE', 'BEAUMONT', 'BROWNSVILLE', 'CORPUS CHRSTI', 'DESTREHAN', 'FREEPORT TX', 'GALVESTON', 'GRAMERCY', 'GULFPORT', 'LK CHARLES', 'MANATEE', 'MORGAN CY', 'ORANGE', 'PANAMA CY FL', 'PASCAGOULA', 'PENSACOLA', 'PORT ARTHUR', 'PT LAVACA', 'RICHMOND', 'S LOUISIANA', 'SABINE', 'TAMPA', 'TEXAS CITY') then TEUS end) over (order by VDATE rows unbounded preceding) GC_Other
FROM
dbo.PIERS_IMP_2018
当前的输出如下所示

VDATE   WC_LA   WC_LB   WC_NWSA WC_Oakland  WC_Other    EC_NYNJ EC_Savannah EC_Norfolk  EC_Charleston   EC_Baltimore    EC_Jacksonville EC_Miami    EC_Everglades   EC_Philadelphia EC_Other    GC_Houston  GC_NO   GC_Mobile   GC_Other
2018-01-27  325733.70   312893.15   90954.71    61868.57    9187.17 246965.45   142550.78   82106.38    67751.38    38852.59    18528.73    28260.92    26714.52    20625.43    42341.01    80724.51    7704.58 7376.37 14115.45
2018-01-27  325733.70   312893.15   90954.71    61868.57    9187.17 246965.63   142550.78   82106.38    67751.38    38852.59    18528.73    28260.92    26714.52    20625.43    42341.01    80724.51    7704.58 7376.37 14115.45
2018-01-27  325733.70   312893.15   90954.71    61868.57    9187.17 246965.81   142550.78   82106.38    67751.38    38852.59    18528.73    28260.92    26714.52    20625.43    42341.01    80724.51    7704.58 7376.37 14115.45
2018-01-27  325733.70   312895.15   90954.71    61868.57    9187.17 246965.81   142550.78   82106.38    67751.38    38852.59    18528.73    28260.92    26714.52    20625.43    42341.01    80724.51    7704.58 7376.37 14115.45
2018-01-28  325733.70   312895.15   90954.71    61868.57    9187.17 246965.99   142550.78   82106.38    67751.38    38852.59    18528.73    28260.92    26714.52    20625.43    42341.01    80724.51    7704.58 7376.37 14115.45
...
正如你所看到的,我得到了一个由数百万个条目组成的输出,每个条目都比前一个条目增加了一点点。与此相反,我只想按月份显示累计总数。例如,1月将是1月底的总数,2月将是2月底的总数,等等……这看起来有点像这样

VDATE   WC_LA   WC_LB   WC_NWSA WC_Oakland  WC_Other    EC_NYNJ EC_Savannah EC_Norfolk  EC_Charleston   EC_Baltimore    EC_Jacksonville EC_Miami    EC_Everglades   EC_Philadelphia EC_Other    GC_Houston  GC_NO   GC_Mobile   GC_Other
2018-01  325733.70   312895.15   90954.71    61868.57    9187.17 246965.99   142550.78   82106.38    67751.38    38852.59    18528.73    28260.92    26714.52    20625.43    42341.01    80724.51    7704.58 7376.37 14115.45
2018-02 325733.70   312895.15   90974.71    61870.57    9187.17 247038.92   142576.78   82118.88    67751.38    38859.59    18528.73    28260.92    26714.52    20625.43    42341.01    80724.51    7704.58 7376.37 14115.45
...
你能帮个忙吗


非常感谢

这里的问题是,在尝试对月份进行累计汇总之前,您没有将单个值分组到每月总计中,这就是为什么您看到的是源数据每行的窗口总计

您可以使用CTE对总计进行分组,然后从中应用运行总计:

declare @t table(d date,v int);
insert into @t values
 ('20190101',1)
,('20190102',3)
,('20190106',8)
,('20190108',4)
,('20190116',7)
,('20190102',9)
,('20190204',2)
,('20190207',9)
,('20190216',4)
,('20190220',6);

with m as
(
    select dateadd(month,datediff(month,0,d),0) as m -- Date arithmetic to return the start of the month
            ,sum(v) as MonthlyTotal
    from @t
    group by dateadd(month,datediff(month,0,d),0)
)
select m
        ,sum(MonthlyTotal) over (order by m) as CumulativeTotal
from m
order by m;
输出
在没有解释、样本输入、预期输出的情况下发布一个不完整的查询将无助于我们帮助您。读这个。有关如何提出好问题的说明,请参见。并找到你需要发布的信息类型。因为它现在还没有回答这个问题。感谢您的反馈,我尝试编辑这个问题以使其更清楚。真正有帮助的是表定义、一些示例数据以及该示例数据的所需输出。我们不是可以读取查询和当前输出并告诉您错误所在的人工sql引擎。
+-------------------------+-----------------+
|            m            | CumulativeTotal |
+-------------------------+-----------------+
| 2019-01-01 00:00:00.000 |              32 |
| 2019-02-01 00:00:00.000 |              53 |
+-------------------------+-----------------+