Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 运行两个表的连接_Sql_Cumulative Sum - Fatal编程技术网

Sql 运行两个表的连接

Sql 运行两个表的连接,sql,cumulative-sum,Sql,Cumulative Sum,我有两张桌子 -----Dates----- ------Sales------ Date | Month Date | Quantity --------------- ------------------ 09/06/16| Jun 09/06/16| 2 09/07/16| Jul 15/07/16| 11 19/09/16| Sep 19/09/16| 12

我有两张桌子

-----Dates-----          ------Sales------
Date    | Month          Date    | Quantity
---------------          ------------------
09/06/16| Jun            09/06/16| 2
09/07/16| Jul            15/07/16| 11
19/09/16| Sep            19/09/16| 12
21/09/16| Sep            09/07/16| 33
17/11/16| Nov            21/09/16| 45
我需要编写一个SQL查询来计算每个月的销售总额

我可以这样做吗

SELECT Month,
(SELECT SUM(Quantity) FROM Sales WHERE Month<=Dates.Month)
FROM Dates, Sales
WHERE Dates.Date = Sales.Date
ORDER BY Month

我觉得我的想法有点不对劲,但我没有一个数据库来证明这一点

你可以用“月”来表示“加入”,然后用“总和”来表示“分组”

  SELECT month(d.date),  SUM(s.Quantity)
  FROM Dates  d 
  LEFT JOIN  Sales S on month(d.date) = month(s.date)
  ORDER BY month(d.date)

您可以使用“月”表示“加入”,然后使用“求和”,使用“分组方式”表示“总计”

  SELECT month(d.date),  SUM(s.Quantity)
  FROM Dates  d 
  LEFT JOIN  Sales S on month(d.date) = month(s.date)
  ORDER BY month(d.date)
您可以通过以下方式使用内部联接和分组:

您可以通过以下方式使用内部联接和分组:

试试这个,应该可以:

WITH CTE
AS
(
Select DateName(mm,D.Date) as Month,MONTH(D.Date) as UsedByOrderByLater,Sum(S.Quantity) as SumForCurrentMonth
 FROM Dates as D
    Inner Join Sales as S
    ON S.Date = D.Date
Group by DateName(mm,D.Date),MONTH(D.Date)
)
Select CTE.Month,CTE.SumForCurrentMonth ,
SUM(CTE.SumForCurrentMonth) OVER(Order by CTE.UsedByOrderByLater
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as runningtotal
from CTE
试试这个,应该可以:

WITH CTE
AS
(
Select DateName(mm,D.Date) as Month,MONTH(D.Date) as UsedByOrderByLater,Sum(S.Quantity) as SumForCurrentMonth
 FROM Dates as D
    Inner Join Sales as S
    ON S.Date = D.Date
Group by DateName(mm,D.Date),MONTH(D.Date)
)
Select CTE.Month,CTE.SumForCurrentMonth ,
SUM(CTE.SumForCurrentMonth) OVER(Order by CTE.UsedByOrderByLater
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as runningtotal
from CTE

如果没有数据库,如何运行查询?你需要一个月一组的澄清后。。。考虑到左表中的条目09/07/16 | Jul,您是否希望2016年7月的所有订单都在该日期或之前?您使用的是哪个数据库没有数据库,这是一个理论问题,我只有一个数据库结构如果没有数据库,您如何运行查询?你需要一个月一组的澄清后。。。考虑到左表中的条目09/07/16 | Jul,您希望2016年7月当天或之前的所有订单吗?您使用的是哪种数据库没有数据库,这是一个理论问题,我只有一个数据库结构