博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复杂SQL代码实例
阅读量:7116 次
发布时间:2019-06-28

本文共 6903 字,大约阅读时间需要 23 分钟。

DECLARE @begin DATETIME,@end DATETIME,@shanghutype INT, @beginshanghuarea BIGINT ,@endshanghuarea bigintSELECT @begin='1753-01-01',@end='9999-12-31',@shanghutype=1,@beginshanghuarea=-1,@endshanghuarea=9223372036854775807IF OBJECT_ID('tempdb.dbo.#tmp', 'U') IS NOT NULLDROP TABLE #tmp;CREATE TABLE #tmp(SysNo	BIGINT,Source	INT,ji	DECIMAL(20,6),dai DECIMAL(20,6))IF @shanghutype=1BEGIN	;WITH    tmpj			  AS ( SELECT   							b.AdjustType ,							a.Source,							AdjustAmount = ISNULL(c.AdjustAmount, 0),							(CASE WHEN A.Source=1 THEN A.VendorSysNo ELSE A.DistributorSysNo END ) AS SysNo				   FROM     [BBCAccount].[dbo].[Account] a WITH ( NOLOCK )							LEFT JOIN BBCFinance.dbo.AccountAdjustReceipt b WITH ( NOLOCK ) ON a.SysNo = b.AccountSysNo																  AND b.Status = 2							LEFT JOIN BBCFinance.dbo.AccountBalanceChange c WITH ( NOLOCK ) ON b.AccountSysNo = c.AccountSysNo							LEFT JOIN BBCAccount.dbo.Distributor distributor WITH(NOLOCK)  ON a.DistributorSysNo=distributor.SysNo							LEFT JOIN BBCAccount.dbo.Vendor vendor WITH(NOLOCK) ON A.VendorSysNo=vendor.SysNo				WHERE (a.InDate BETWEEN  @begin  and @end )  					AND a.SOURCE=@shanghutype  					AND ( a.VendorSysNo  BETWEEN @beginshanghuarea AND  @endshanghuarea)	)	INSERT INTO #tmp(SysNo,Source,ji,dai)	SELECT  distinct		(CASE WHEN a1.Source=1 THEN a1.VendorSysNo ELSE a1.DistributorSysNo END ) AS SysNo,				a1.Source,				ji = ( SELECT   SUM(bb.AdjustAmount)					   FROM     tmpj bb					   WHERE    (bb.SysNo = a1.VendorSysNo OR bb.SysNo=a1.DistributorSysNo)								AND bb.AdjustType = 1					 ) ,				dai = ( SELECT  SUM(bb.AdjustAmount)						FROM    tmpj bb						WHERE    (bb.SysNo = a1.VendorSysNo OR bb.SysNo=a1.DistributorSysNo)								AND bb.AdjustType = -1					  )			FROM    [BBCAccount].[dbo].[Account] a1 WITH ( NOLOCK ) 		WHERE (a1.InDate BETWEEN  @begin  and @end )  				AND a1.SOURCE=@shanghutype  				AND ( a1.VendorSysNo  BETWEEN @beginshanghuarea AND  @endshanghuarea)				 	ENDELSEBEGIN	IF OBJECT_ID('tempdb.dbo.#tmp', 'U') IS NOT NULL    DROP TABLE #tmp;	;WITH    tmpj			  AS ( SELECT   							b.AdjustType ,							a.Source,							AdjustAmount = ISNULL(c.AdjustAmount, 0),							(CASE WHEN A.Source=1 THEN A.VendorSysNo ELSE A.DistributorSysNo END ) AS SysNo				   FROM     [BBCAccount].[dbo].[Account] a WITH ( NOLOCK )							LEFT JOIN BBCFinance.dbo.AccountAdjustReceipt b WITH ( NOLOCK ) ON a.SysNo = b.AccountSysNo																  AND b.Status = 2							LEFT JOIN BBCFinance.dbo.AccountBalanceChange c WITH ( NOLOCK ) ON b.AccountSysNo = c.AccountSysNo							LEFT JOIN BBCAccount.dbo.Distributor distributor WITH(NOLOCK)  ON a.DistributorSysNo=distributor.SysNo							LEFT JOIN BBCAccount.dbo.Vendor vendor WITH(NOLOCK) ON A.VendorSysNo=vendor.SysNo				WHERE (a.InDate BETWEEN  @begin  and @end )  					AND a.SOURCE=@shanghutype  					AND ( a.DistributorSysNo  BETWEEN @beginshanghuarea AND  @endshanghuarea)	)	INSERT INTO #tmp(SysNo,Source,ji,dai)	SELECT  distinct		(CASE WHEN a1.Source=1 THEN a1.VendorSysNo ELSE a1.DistributorSysNo END ) AS SysNo,						a1.Source,				ji = ( SELECT   SUM(bb.AdjustAmount)					   FROM     tmpj bb					   WHERE    (bb.SysNo = a1.VendorSysNo OR bb.SysNo=a1.DistributorSysNo)								AND bb.AdjustType = 1					 ) ,				dai = ( SELECT  SUM(bb.AdjustAmount)						FROM    tmpj bb						WHERE    (bb.SysNo = a1.VendorSysNo OR bb.SysNo=a1.DistributorSysNo)								AND bb.AdjustType = -1					  )		FROM    [BBCAccount].[dbo].[Account] a1 WITH ( NOLOCK ) 		WHERE (a1.InDate BETWEEN  @begin  and @end )  				AND a1.SOURCE=@shanghutype  				AND ( a1.DistributorSysNo  BETWEEN @beginshanghuarea AND  @endshanghuarea)END IF OBJECT_ID('tempdb.dbo.#tmp2', 'U') IS NOT NULL    DROP TABLE #tmp2;WITH    TMP          AS ( SELECT   ROW_NUMBER() OVER ( PARTITION BY a.SysNo ORDER BY B.INDATE DESC ) AS RowNumber ,                       -- a.SysNo ,                        BU.Name ,                        b.AdjustedBalance,						(CASE WHEN A.Source=1 THEN A.VendorSysNo ELSE A.DistributorSysNo END ) AS SysNo               FROM     [BBCAccount].[dbo].[Account] a WITH ( NOLOCK )                        LEFT JOIN BBCAccount.dbo.BusinessType BU WITH ( NOLOCK ) ON a.BizTypeCode = BU.Code                                                              AND BU.ParentCode IS NULL                                                              AND BU.Type = 0                                                              AND BU.IsSystem = 1                        LEFT JOIN BBCFinance.dbo.AccountBalanceChange b WITH ( NOLOCK ) ON a.SysNo = b.AccountSysNo                        LEFT JOIN BBCFinance.dbo.AccountAdjustReceipt c ON b.AccountSysNo = c.AccountSysNo                                                              AND b.BizID = c.ChangeNo						LEFT JOIN BBCAccount.dbo.Distributor distributor WITH(NOLOCK)  ON a.DistributorSysNo=distributor.SysNo						LEFT JOIN BBCAccount.dbo.Vendor vendor WITH(NOLOCK) ON A.VendorSysNo=vendor.SysNo               WHERE    c.Status = 2                        AND BU.Type = 0                        AND BU.IsSystem = 1                        AND BU.ParentCode IS NULL                        AND BU.Type = 0                        AND BU.IsSystem = 1             ),        TMP1          AS ( SELECT   SysNo ,                        Name ,                        AdjustedBalance               FROM     TMP               WHERE    RowNumber = 1             )    SELECT  SysNo ,            Name ,            amount = SUM(AdjustedBalance)    INTO    #tmp2    FROM    TMP1    GROUP BY Name ,            SysNo; IF OBJECT_ID('tempdb.dbo.#tmp', 'U') IS NOT NULLDROP TABLE #ty;;WITH ttAS(SELECT  t1.SysNo,total=SUM(t2.amount)FROM    #tmp t1        LEFT JOIN #tmp2 t2 ON t1.SysNo = t2.SysNo--WHERE  -- t1.SysNo = 2272  GROUP BY  t1.SysNo ) SELECT  t1.SysNo,t1.Source,t1.ji,t1.dai,t2.Name,t2.amount,tt.total INTO #tyFROM    #tmp t1        LEFT JOIN #tmp2 t2 ON t1.SysNo = t2.SysNoLEFT JOIN tt 	ON t1.SysNo=tt.SysNo--WHERE   t1.SysNo = 2272  ORDER BY t1.SysNo; SELECT T.*, qmye=(ye+djye+kms+bzj+fxye) FROM ( SELECT SysNo,Source,ji AS jffse,dai AS dffse,  ye=CASE WHEN Name='余额账户' THEN amount ELSE 0.00 END,  djye=CASE WHEN Name='冻结余额账户' THEN amount ELSE 0.00 END,  kms=CASE WHEN Name='跨贸税账户' THEN amount ELSE 0.00 END,  bzj=CASE WHEN Name='保证金账户' THEN amount ELSE 0.00 END,  fxye=CASE WHEN Name='供应商的分销余额' THEN amount ELSE 0.00 END FROM #ty)  AS T--DECLARE @sql_col VARCHAR(8000)--DECLARE @sql_str VARCHAR(8000)--DECLARE @sql_ VARCHAR(MAX)--SELECT @sql_col = ISNULL(@sql_col + ',','') + QUOTENAME(name) FROM #ty--SET @sql_='--select a.*,--jie=(select top(1) ji  from #ty ty where ty.sysno=a.sysno),--dai=(select top(1) dai  from #ty ty where ty.sysno=a.sysno)--from --(--select *--from(--		select totAL,Name,SysNo  from #ty--	)as tw--pivot( max(totAL) for Name in('+@sql_col+') )piv--) a --'--EXEC(@sql_)--SELECT TOP(1) * FROM #ty

  

转载于:https://www.cnblogs.com/cykj/p/SQL-Exam.html

你可能感兴趣的文章
【196】Dell 移动工作站系统安装方法
查看>>
vue---数据列表过滤筛选
查看>>
Linux Debugging(三): C++函数调用的参数传递方法总结(通过gdb+反汇编)
查看>>
Android Studio 错误: 非法字符: '\ufeff' 解决方式|错误: 须要class, interface或enum...
查看>>
form表单action=""的作用
查看>>
手机号正则
查看>>
前端开发要注意的浏览器兼容性问题整理
查看>>
直接写文件名就可以执行脚本文件
查看>>
JavaScript和HTML DOM的区别与联系
查看>>
matlab练习程序(模糊集图像增强)
查看>>
【JavaScript学习笔记】hello world
查看>>
如何实现一个可用的javaagent
查看>>
day83 前端框架--Vue基础&Vue组件
查看>>
公司memcache安装方式及启动方式
查看>>
ubuntu jdk1.7 安装
查看>>
行为型设计模式之模板方法(Template Method)
查看>>
×××群最全实操玩法
查看>>
AIX 5 ftp 文件传输
查看>>
5英寸小屏手机:何以统一性价比与体验?
查看>>
企业云桌面-16-配置DHCP服务器-011-DC01
查看>>