SQL——处理行的累加

简介:        背景:               现在有一张报表,其中上面的数据是商家的订单数据,按照天统计的,要从订单表查出每天的某个商家的订单量,然后去日收益表查出这天的这个商家的收益额,然后还要统计出在某天之前的所有收益额,然后从查出的这种表里筛选出某个时间段的记录。


       背景:


              现在有一张报表,其中上面的数据是商家的订单数据,按照天统计的,要从订单表查出每天的某个商家的订单量,然后去日收益表查出这天的这个商家的收益额,然后还要统计出在某天之前的所有收益额,然后从查出的这种表里筛选出某个时间段的记录。


            下面是SQL:


ALTER PROCEDURE [dbo].[sp_LoadSellerDataByTime]


	@SellerCode NVARCHAR(36), --商家编码
	@StartTime CHAR(20), --起始日期
	@EndTime CHAR(20),	--终止日期

	@pageSize INT=31, --一页内有多少条数据 
	@pageIndex INT=1 --第几页 
	 


AS

	DECLARE @totalCount INT --返回数据条数



--每日营业额表
SELECT * INTO #temp_Count FROM(
	SELECT  

		LEFT(convert(varchar,table0.CreateTime,21),10) AS MonthDate/*本条日期*/,
		SUM(table0.TotalCharge) AS SumMonthMoney/*今天总营业额*/

	FROM [CommunityCatering].[Catering].[SellerIncome] table0
	WHERE table0.SellerCode=@SellerCode/*sellerCode*/
	GROUP BY LEFT(convert(varchar,table0.CreateTime,21),10) 

) AS tempCount



--查总金额
SELECT * INTO #MainTable FROM(

SELECT MonthDate,SumMonthMoney,SumTotalMoney,ISNULL(TotalCount,0) AS TotalCount FROM (

	SELECT MonthDate,SumMonthMoney,
		SumTotalMoney=(
		
			SELECT SUM(SumMonthMoney)
		    FROM #temp_Count t1
			WHERE t1.MonthDate<=t2.MonthDate
		
		)

	 FROM #temp_Count t2


)AS SI

LEFT JOIN(/*查每日订单数量*/


	 SELECT 
	 LEFT(convert(varchar,Ord.CompleteTime,21),10) AS MonthDate1,
	 COUNT(1) AS TotalCount/*订单数量*/

	 FROM CommunityCatering.Catering.[Order] Ord 
	 WHERE ord.CompleteTime IS NOT NULL AND ord.ValidStatus=5/*有效性:选择已经完成的订单*/
		AND ord.SellerCode=@SellerCode/*商家code*/
	 GROUP BY LEFT(convert(varchar,Ord.CompleteTime,21),10)

) AS temp ON SI.MonthDate=temp.MonthDate1



) AS MainTable



	 SELECT *,
			ROW_NUMBER() OVER(ORDER BY #MainTable.MonthDate) AS RowNum/*分页需要字段*/ 
	 FROM  #MainTable WHERE  #MainTable.MonthDate BETWEEN @StartTime AND @EndTime /*去开始时间结束时间的数据*/

  --计算总的数据条数
	 SELECT @totalCount=ISNULL(COUNT(1),0)  FROM #MainTable WHERE #MainTable.MonthDate BETWEEN @StartTime AND @EndTime

 --输出总的数据条数
	 SELECT @totalCount AS TotalCount



--删除临时表
 DROP TABLE #MainTable
 DROP TABLE #temp_Count









     如上代码:

               例如:第一列代表天,第二列代表当天营业额,第三列代表本天之前的所有营业额,可以看出第三列是第二列的一个累加。




            在SQL中,这里首先定义一个临时表,然后使用一个小的嵌套查询,在这个嵌套查询里面,我们计算出前面每天营业额的累加。







         

目录
相关文章
|
7月前
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之如何查看SQL语句使用的是行索引还是列索引
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
7月前
|
存储 分布式计算 大数据
MaxCompute产品使用合集之在sql里调用自定义的udf时,设置一次同时处理的数据行数,是并行执行还是串行执行的
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
8月前
|
SQL API 数据库
在Python中获取筛选后的SQL数据行数
在Python中获取筛选后的SQL数据行数
75 1
|
SQL 数据库
数据库——通过SQL进行数据累加
数据库——通过SQL进行数据累加
|
8月前
|
SQL 数据库
SQL JOIN 子句:合并多个表中相关行的完整指南
SQL LEFT JOIN关键字返回左表(table1)中的所有记录以及右表(table2)中的匹配记录。如果没有匹配,则右侧的结果为0条记录。
355 0
|
SQL 数据库
【SQL server 修改编辑前200行操作中的行数】
【SQL server 修改编辑前200行操作中的行数】
239 0
【SQL server 修改编辑前200行操作中的行数】
|
SQL 关系型数据库 MySQL
【SQL系列】检索在另一张表中没有对应行的行
【SQL系列】检索在另一张表中没有对应行的行
119 0
|
SQL Oracle 关系型数据库
update时 单行子查询返回多个行 SQL 错误 [1427] 处理方案
我遇到此错误是在多表关联update的
858 0
|
SQL 关系型数据库 Java
高逼格的 SQL 写法:行行比较
高逼格的 SQL 写法:行行比较