--生成日结数据

====================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: 资金日结
-- =============================================
ALTER PROCEDURE [UC].[P_Fin_DailySummary_Insert]
AS
BEGIN TRY
SET NOCOUNT ON ;
DECLARE @ErrorID INT= 0
DECLARE @vcExecInfo VARCHAR(1)=''
SET NOCOUNT ON ;
DECLARE @dtDate VARCHAR(15)= CONVERT(VARCHAR(15), DATEADD(day, ( -1 ), GETDATE()), 23)
DECLARE @dtYesterdayDate VARCHAR(15)= CONVERT(VARCHAR(15), DATEADD(day, ( -2 ), GETDATE()), 23)
DECLARE @dtTodayDate VARCHAR(15)= CONVERT(VARCHAR(15), DATEADD(day, ( 0 ), GETDATE()), 23) --DELETE UC.Fin_DailySummary
--WHERE dtBalanceDate = @dtDate INSERT INTO UC.Fin_DailySummary ( dtBalanceDate, vcCustomerNo, vcLoginId, nCustomerType, dmYesterdayBalance, dmTodayBalance, dmRechargeAmount, dmWithDrawAmount, dmSellGoldAmount, dmBuyGoldAmount, dmGoldCompensate, dmWithDrawFee, dmRechargeFee, dmGoldSellFee, dmAdvertAmount, dmRechargeAdjust, dmWithDrawAdjust, dmGoldOrderAdjust )
SELECT @dtDate, a.vcCustomerNo, a.vcUserName,a.nCustomerType,0 AS dmYesterdayBalance,ISNULL(a.dmCurrentFund-ISNULL(c.dmFund,0),0) AS dmTodayBalance, ISNULL(b.dmRechargeAmount, 0) AS dmRechargeAmount, ISNULL(b.dmWithDrawAmount, 0) AS dmWithDrawAmount,ISNULL(b.dmSellGoldAmount, 0) AS dmSellGoldAmount, ISNULL(b.dmBuyGoldAmount, 0) AS dmBuyGoldAmount, ISNULL(b.dmGoldCompensate, 0) AS dmGoldCompensate, ISNULL(b.dmWithdrawFee, 0) AS dmWithDrawFee, ISNULL(b.dmRechargeFee, 0) AS dmRechargeFee,0 AS dmGoldSellFee,0 AS dmAdvertAmount,ISNULL(b.dmRechargeAdjust, 0) AS dmRechargeAdjust,ISNULL(b.dmWithDrawAdjust, 0) AS dmWithDrawAdjust,ISNULL(b.dmGoldOrderAdjust, 0) AS dmGoldOrderAdjust
FROM UC.Cus_Customer AS a
LEFT JOIN ( SELECT vcCustomerNo,
ISNULL(SUM(CASE nFundType
WHEN 10 THEN dmFund
ELSE 0 END), 0) AS dmRechargeAmount,
ISNULL(SUM(CASE nFundType
WHEN 14 THEN dmFund
ELSE 0 END), 0) AS dmWithDrawAmount,
ISNULL(SUM(CASE nFundType
WHEN 22 THEN dmFund
ELSE 0 END), 0) AS dmBuyGoldAmount,
ISNULL(SUM(CASE nFundType
WHEN 23 THEN dmFund
ELSE 0 END), 0) AS dmSellGoldAmount,
ISNULL(SUM(CASE nFundType
WHEN 17 THEN dmFund
ELSE 0 END), 0) AS dmGoldCompensate,
ISNULL(SUM(CASE nFundType
WHEN 11 THEN dmFund
ELSE 0 END), 0) AS dmRechargeFee,
ISNULL(SUM(CASE nFundType
WHEN 18 THEN dmFund
ELSE 0 END), 0) AS dmWithdrawFee,
ISNULL(SUM(CASE nAdjustType
WHEN 11 THEN dmFund
ELSE 0 END), 0) AS dmRechargeAdjust,
ISNULL(SUM(CASE nAdjustType
WHEN 12 THEN dmFund
ELSE 0 END), 0) AS dmWithDrawAdjust,
ISNULL(SUM(CASE nAdjustType
WHEN 13 THEN dmFund
ELSE 0 END), 0) AS dmGoldOrderAdjust
FROM UC.Fin_CustomerFundJour
WHERE CONVERT(VARCHAR(10),dtCreateDate,120) = @dtDate
GROUP BY vcCustomerNo ) AS b
ON a.vcCustomerNo = b.vcCustomerNo
LEFT JOIN (SELECT SUM(dmFund) AS dmFund,vcCustomerNo
FROM UC.Fin_CustomerFundJour
WHERE CONVERT(VARCHAR(10),dtCreateDate,120) = @dtTodayDate
GROUP BY vcCustomerNo) AS c
ON a.vcCustomerNo = c.vcCustomerNo --修改前日余额
UPDATE Fin_DailySummary
SET dmYesterdayBalance = c.dmTodayBalance
FROM Fin_DailySummary AS a ,
( SELECT b.dmTodayBalance, b.vcCustomerNo
FROM Fin_DailySummary AS b
WHERE b.dtBalanceDate = @dtYesterdayDate ) c
WHERE a.vcCustomerNo = c.vcCustomerNo AND a.dtBalanceDate = @dtDate END TRY
BEGIN CATCH
IF @@trancount > 0
ROLLBACK TRAN ;
EXEC P_Pub_GetErrorMsgExecInfo @ErrorID OUT,@vcExecInfo OUT
END CATCH

<--------------------------------------------------------------------分割线-------------------------------------------------------------------------------------->

--日结数据查询

-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: 客户资金日结查询
-- =============================================
ALTER PROCEDURE [UC].[P_Admin_Fin_DailySummary_Search]
@vcBeginDate VARCHAR(50) ,
@vcEndDate VARCHAR(50) ,
@nCustomerType INT ,
@vcSearValue VARCHAR(100) ,
@nPageIndex INT ,
@nPageSize INT ,
@nTotleRecord INT OUT ,
@nPageCount INT OUT
AS
BEGIN
SET NOCOUNT ON ;
DECLARE @nRowStart INT
DECLARE @nRowEnd INT
DECLARE @vcSearchBeginDate VARCHAR(50)
DECLARE @vcSearchEndDate VARCHAR(50)
SET @nRowEnd = @nPageIndex * @nPageSize
SET @nRowStart = @nRowEnd - @nPageSize + 1 --设置默认值
IF @vcBeginDate = ''
SET @vcBeginDate = CONVERT(VARCHAR(10), GETDATE() - 1, 120)
IF @vcEndDate = ''
SET @vcEndDate = CONVERT(VARCHAR(10), GETDATE(), 120) SET @vcSearchBeginDate = @vcBeginDate
SET @vcSearchEndDate = @vcEndDate SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY vcCustomerNo DESC ) AS RowIndex, *
FROM UC.Fin_DailySummary
WHERE ( @vcSearValue = '' OR ( vcLoginId = @vcSearValue OR vcCustomerNo = @vcSearValue ) ) AND ( @nCustomerType = 0 OR nCustomerType = @nCustomerType ) AND dtBalanceDate BETWEEN @vcBeginDate AND @vcEndDate ) AS cte
WHERE RowIndex BETWEEN @nRowStart AND @nRowEnd IF NOT EXISTS ( SELECT 1
FROM UC.Fin_DailySummary
WHERE CONVERT(VARCHAR(10), dtBalanceDate, 120) = @vcSearchBeginDate )
BEGIN
--如果不存在按照开始日期查询的数据 取数据库最开始的时间
SELECT DISTINCT TOP 1
@vcSearchBeginDate = CONVERT(VARCHAR(10), dtBalanceDate, 120)
FROM UC.Fin_DailySummary
ORDER BY CONVERT(VARCHAR(10), dtBalanceDate, 120) ASC
END
IF NOT EXISTS ( SELECT 1
FROM UC.Fin_DailySummary
WHERE CONVERT(VARCHAR(10), dtBalanceDate, 120) = @vcSearchEndDate )
BEGIN
--如果不存在按照结束日期查询的数据 取数据库最新的时间
SELECT DISTINCT TOP 1
@vcSearchEndDate = CONVERT(VARCHAR(10), dtBalanceDate, 120)
FROM UC.Fin_DailySummary
ORDER BY CONVERT(VARCHAR(10), dtBalanceDate, 120) DESC
END IF @nCustomerType = 0
BEGIN
--查询所有客户分类时 --按照客户分类汇总信息
SELECT CASE nCustomerType
WHEN 10 THEN '正式客户合计' + CONVERT(VARCHAR(10), COUNT(1)) + '条'
WHEN 11 THEN '测试客户合计' + CONVERT(VARCHAR(10), COUNT(1)) + '条'
WHEN 12 THEN '内部客户合计' + CONVERT(VARCHAR(10), COUNT(1)) + '条'
END AS vcCustomerNo, SUM(dmRechargeAmount) AS dmRechargeAmount, SUM(dmWithDrawAmount) AS dmWithDrawAmount, SUM(dmSellGoldAmount) AS dmSellGoldAmount, SUM(dmBuyGoldAmount) AS dmBuyGoldAmount, SUM(dmGoldCompensate) AS dmGoldCompensate, SUM(dmWithDrawFee) AS dmWithDrawFee, SUM(dmRechargeFee) AS dmRechargeFee, SUM(dmGoldSellFee) AS dmGoldSellFee, SUM(dmAdvertAmount) AS dmAdvertAmount, SUM(dmRechargeAdjust) AS dmRechargeAdjust, SUM(dmWithDrawAdjust) AS dmWithDrawAdjust, SUM(dmGoldOrderAdjust) AS dmGoldOrderAdjust, nCustomerType
INTO #summary
FROM UC.Fin_DailySummary
WHERE ( @vcSearValue = '' OR ( vcLoginId = @vcSearValue OR vcCustomerNo = @vcSearValue ) ) AND dtBalanceDate BETWEEN @vcBeginDate AND @vcEndDate
GROUP BY nCustomerType --汇总所有的记录
SELECT '合计' + CONVERT(VARCHAR(10), COUNT(1)) + '条' AS vcCustomerNo, SUM(dmRechargeAmount) AS dmRechargeAmount, SUM(dmWithDrawAmount) AS dmWithDrawAmount, SUM(dmSellGoldAmount) AS dmSellGoldAmount, SUM(dmBuyGoldAmount) AS dmBuyGoldAmount, SUM(dmGoldCompensate) AS dmGoldCompensate, SUM(dmWithDrawFee) AS dmWithDrawFee, SUM(dmRechargeFee) AS dmRechargeFee, SUM(dmGoldSellFee) AS dmGoldSellFee, SUM(dmAdvertAmount) AS dmAdvertAmount, SUM(dmRechargeAdjust) AS dmRechargeAdjust, SUM(dmWithDrawAdjust) AS dmWithDrawAdjust, SUM(dmGoldOrderAdjust) AS dmGoldOrderAdjust
INTO #allsummary
FROM UC.Fin_DailySummary
WHERE ( @vcSearValue = '' OR ( vcLoginId = @vcSearValue OR vcCustomerNo = @vcSearValue ) ) AND dtBalanceDate BETWEEN @vcBeginDate AND @vcEndDate --按照客户分类 汇总前日余额
SELECT SUM(dmYesterdayBalance) AS dmYesterdayBalance, nCustomerType
INTO #yesterday
FROM UC.Fin_DailySummary
WHERE ( @vcSearValue = '' OR ( vcLoginId = @vcSearValue OR vcCustomerNo = @vcSearValue ) ) AND CONVERT(VARCHAR(10), dtBalanceDate, 120) = @vcSearchBeginDate
GROUP BY nCustomerType --按照客户分类 汇总当日余额
SELECT SUM(dmTodayBalance) AS dmTodayBalance, nCustomerType
INTO #today
FROM UC.Fin_DailySummary
WHERE ( @vcSearValue = '' OR ( vcLoginId = @vcSearValue OR vcCustomerNo = @vcSearValue ) ) AND CONVERT(VARCHAR(10), dtBalanceDate, 120) = @vcSearchEndDate
GROUP BY nCustomerType --汇总所有客户的前日余额
SELECT SUM(dmYesterdayBalance) AS dmYesterdayBalance
INTO #allyesterday
FROM UC.Fin_DailySummary
WHERE ( @vcSearValue = '' OR ( vcLoginId = @vcSearValue OR vcCustomerNo = @vcSearValue ) ) AND CONVERT(VARCHAR(10), dtBalanceDate, 120) = @vcSearchBeginDate --汇总所有客户的当日余额
SELECT SUM(dmTodayBalance) AS dmTodayBalance
INTO #alltoday
FROM UC.Fin_DailySummary
WHERE ( @vcSearValue = '' OR ( vcLoginId = @vcSearValue OR vcCustomerNo = @vcSearValue ) ) AND CONVERT(VARCHAR(10), dtBalanceDate, 120) = @vcSearchEndDate --返回结果(根据客户分类汇总的记录以及所有客户的汇总记录)
SELECT #summary.vcCustomerNo, #yesterday.dmYesterdayBalance, #today.dmTodayBalance, #summary.dmRechargeAmount, #summary.dmWithDrawAmount, #summary.dmSellGoldAmount, #summary.dmBuyGoldAmount, #summary.dmGoldCompensate, #summary.dmWithDrawFee, #summary.dmRechargeFee, #summary.dmGoldSellFee, #summary.dmAdvertAmount, #summary.dmRechargeAdjust, #summary.dmWithDrawAdjust, #summary.dmGoldOrderAdjust
FROM #summary
INNER JOIN #yesterday
ON #summary.nCustomerType = #yesterday.nCustomerType
INNER JOIN #today
ON #summary.nCustomerType = #today.nCustomerType
UNION ALL
( SELECT #allsummary.vcCustomerNo, #allyesterday.dmYesterdayBalance, #alltoday.dmTodayBalance, #allsummary.dmRechargeAmount, #allsummary.dmWithDrawAmount, #allsummary.dmSellGoldAmount, #allsummary.dmBuyGoldAmount, #allsummary.dmGoldCompensate, #allsummary.dmWithDrawFee, #allsummary.dmRechargeFee, #allsummary.dmGoldSellFee, #allsummary.dmAdvertAmount, #allsummary.dmRechargeAdjust, #allsummary.dmWithDrawAdjust, #allsummary.dmGoldOrderAdjust
FROM #allsummary
CROSS JOIN #allyesterday
CROSS JOIN #alltoday) END
ELSE
BEGIN
--按照客户分类查询时 --根据条件汇总数据
SELECT '合计' + CONVERT(VARCHAR(10), COUNT(1)) + '条' AS vcCustomerNo, SUM(dmRechargeAmount) AS dmRechargeAmount, SUM(dmWithDrawAmount) AS dmWithDrawAmount, SUM(dmSellGoldAmount) AS dmSellGoldAmount, SUM(dmBuyGoldAmount) AS dmBuyGoldAmount, SUM(dmGoldCompensate) AS dmGoldCompensate, SUM(dmWithDrawFee) AS dmWithDrawFee, SUM(dmRechargeFee) AS dmRechargeFee, SUM(dmGoldSellFee) AS dmGoldSellFee, SUM(dmAdvertAmount) AS dmAdvertAmount, SUM(dmRechargeAdjust) AS dmRechargeAdjust, SUM(dmWithDrawAdjust) AS dmWithDrawAdjust, SUM(dmGoldOrderAdjust) AS dmGoldOrderAdjust
INTO #temp1
FROM UC.Fin_DailySummary
WHERE ( @vcSearValue = '' OR ( vcLoginId = @vcSearValue OR vcCustomerNo = @vcSearValue ) ) AND ( @nCustomerType = 0 OR nCustomerType = @nCustomerType ) AND dtBalanceDate BETWEEN @vcBeginDate AND @vcEndDate --根据条件汇总前日余额
SELECT SUM(dmYesterdayBalance) AS dmYesterdayBalance
INTO #allyesterday1
FROM UC.Fin_DailySummary
WHERE ( @vcSearValue = '' OR ( vcLoginId = @vcSearValue OR vcCustomerNo = @vcSearValue ) ) AND ( @nCustomerType = 0 OR nCustomerType = @nCustomerType ) AND CONVERT(VARCHAR(10), dtBalanceDate, 120) = @vcSearchBeginDate --根据条件汇总当日余额
SELECT SUM(dmTodayBalance) AS dmTodayBalance
INTO #alltoday1
FROM UC.Fin_DailySummary
WHERE ( @vcSearValue = '' OR ( vcLoginId = @vcSearValue OR vcCustomerNo = @vcSearValue ) ) AND ( @nCustomerType = 0 OR nCustomerType = @nCustomerType ) AND CONVERT(VARCHAR(10), dtBalanceDate, 120) = @vcSearchEndDate --返回结果
SELECT #temp1.vcCustomerNo, #allyesterday1.dmYesterdayBalance, #alltoday1.dmTodayBalance, #temp1.dmRechargeAmount, #temp1.dmWithDrawAmount, #temp1.dmSellGoldAmount, #temp1.dmBuyGoldAmount, #temp1.dmGoldCompensate, #temp1.dmWithDrawFee, #temp1.dmRechargeFee, #temp1.dmGoldSellFee, #temp1.dmAdvertAmount, #temp1.dmRechargeAdjust, #temp1.dmWithDrawAdjust, #temp1.dmGoldOrderAdjust
FROM #temp1
CROSS JOIN #allyesterday1
CROSS JOIN #alltoday1 END --返回所有的记录数以及分页数
SELECT @nTotleRecord = COUNT(1), @nPageCount = COUNT(1) / @nPageSize + CASE COUNT(1) % @nPageSize
WHEN 0 THEN 0
ELSE 1
END
FROM UC.Fin_DailySummary
WHERE ( @vcSearValue = '' OR ( vcLoginId = @vcSearValue OR vcCustomerNo = @vcSearValue ) ) AND ( @nCustomerType = 0 OR nCustomerType = @nCustomerType ) AND dtBalanceDate BETWEEN @vcBeginDate AND @vcEndDate END

sql 日结的更多相关文章

  1. SQL Server 为代码减负之存储过程

        存储过程能够用来提高数据库的查询效率.由于它事先被编译过.被储存于内存中,每次执行前.不必被从新编译,所以效率非常高. 存储过程是一组sql增删改查的集合,假设程序中的一个功能涉及到对数据库的 ...

  2. SQL SERVER数据库基本语法汇总,仅代表个人整理,仅供参考

    以下SQL基本语法皆由本人整理,以下做一个汇总,关于游标,可作为了解,不要求掌握,其他查询.修改.删除操作等基本语法必须会使用.select * from [dbo].[TBICJE]select m ...

  3. SQL做日历

    DECLARE @DATE DATETIME SET @DATE=GETDATE() SELECT SUN -DAY(@DATE),@DATE))=@DATE THEN '*' ELSE '' END ...

  4. sql server生成自动增长的字母数字字符串

    在开发的过程中,我们经常会遇到要生成一些固定格式字符串,例如“BX201903150001”,结构为:BX+日期+N位序号,类似这种的字符串我们很难生成,在这里我们借助一个存储过程来实现这个功能. 1 ...

  5. sql优化实战:从1353秒到135秒(删除索引+修改数据+重建索引)

    最近在优化日结存储过程,日结存储过程中大概包含了20多个存储过程. 发现其有一个存储过程代码有问题,进一步发现结存的数据中有一个 日期字段business_date 是有问题的,这个字段对应的类型是v ...

  6. SpringMVC +mybatis+spring 结合easyui用法及常见问题总结

    SpringMVC +mybatis+spring 结合easyui用法及常见问题总结 1.FormatString的用法. 2.用postAjaxFillGrid实现dataGrid 把form表单 ...

  7. Datatable.Compute小技巧

    在个人版机房重构的过程中,大家最发愁的一件事无非就是上下机,结账和报表.那么在结账的过程中,最发愁的是否就数计算日结账单的数据和周结账的数据.还记得在第一遍机房收费系统的过程中用的是for 循环,但是 ...

  8. VB.NET版机房收费系统---报表

    报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...

  9. MySQL ORDER BY主键id加LIMIT限制走错索引

    背景及现象 report_product_sales_data表数据量2800万: 经测试,在当前数据量情况下,order by主键id,limit最大到49的时候可以用到索引report_produ ...

随机推荐

  1. LeetCode OJ 41. First Missing Positive

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

  2. C语言 - 预编译

    1.#ifdef 实现 与 或#if (defined SIMULATION) && (defined _FMM_LOG)#endif #if (!defined A) || (!de ...

  3. apicloud ios 打包流程

    1创建APP ID 等 2创建pruduction创建证书,用 这个证书导出P12格式的.. 3profile 证书,选 APP STORE  AD-HOC ok... http://docs.api ...

  4. 【linux shell系列--1】crontab命令

    摘自:http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html 一.crond简介 crond是linux下用来周期性的执行某种任务或等 ...

  5. hive深入

    Hive QL: Create Table 创建一个指定名字的表.如果相同名字的表已经存在,则抛出异常:用户可以用 IF NOT EXIST 选项来忽略这个异常. EXTERNAL 关键字可以让用户创 ...

  6. mongoDB5--mongoDB增删改查

    之前我们探讨了mongodb的"增删改查",要知道,我们的增删改其实都离不开查询表达式,所以查询表达式在mongodb是非常重要的.关于查询其实我们只是介绍了以小部分.关于mong ...

  7. Python mining

    1.pandas,使用pycharm安装  http://bbs.pinggu.org/thread-3633477-1-1.html 2.eric4 快捷键 http://blog.csdn.net ...

  8. python2.7学习记录之二

    一.高级特性 1.切片取前3个元素用L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3.如果第一个索引是0可省略.前10个数 每两个取一个L[:10:2],所有数 每5个取一个L[::5 ...

  9. 网页特效-动态加载JavaScript

    描述: 把一些逻辑独立的JavaScript脚本文件单独加载,是一种常见的JavaScript动态加载技术.可以减少不必要的JavaScript脚本文件的加载,以提高网页浏览速度 代码: <!D ...

  10. 图像相似度计算之哈希值方法OpenCV实现

    http://blog.csdn.net/fengbingchun/article/details/42153261 图像相似度计算之哈希值方法OpenCV实现 2014-12-25 21:27 29 ...