复杂SQL代码实例
DECLARE @begin DATETIME,@end DATETIME,@shanghutype INT, @beginshanghuarea BIGINT ,@endshanghuarea bigint
SELECT @begin='1753-01-01',@end='9999-12-31',@shanghutype=1,@beginshanghuarea=-1,@endshanghuarea=9223372036854775807 IF OBJECT_ID('tempdb.dbo.#tmp', 'U') IS NOT NULL
DROP TABLE #tmp;
CREATE TABLE #tmp
(
SysNo BIGINT,
Source INT,
ji DECIMAL(20,6),
dai DECIMAL(20,6) ) IF @shanghutype=1
BEGIN ;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) END
ELSE
BEGIN
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 NULL
DROP TABLE #ty; ;WITH tt
AS
( 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 #ty
FROM #tmp t1
LEFT JOIN #tmp2 t2 ON t1.SysNo = t2.SysNo
LEFT 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
复杂SQL代码实例的更多相关文章
- sql注入实例分析
什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具 ...
- (4.22)Microsoft 管理控制台启用 SSL 加密的 SQL Server 实例
如何通过使用 Microsoft 管理控制台启用 SSL 加密的 SQL Server 实例 关键词:MSSQL加密,sql server加密,sql server客户端与服务器传输内容加密 转自:h ...
- 使用Phoenix将SQL代码移植至HBase
1.前言 HBase是云计算环境下最重要的NOSQL数据库,提供了基于Hadoop的数据存储.索引.查询,其最大的优点就是可以通过硬件的扩展从而几乎无限的扩展其存储和检索能力.但是HBase与传统的基 ...
- IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)
IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...
- C#读写Access数据库、表格datagridview窗体显示代码实例
C#读写Access数据库.表格datagridview窗体显示代码实例 最近项目中用到C#对于Access数据库表读写.mdb操作,学习了下相关的东西,这里先整理C#对于Access数据库的操作,对 ...
- MATLAB的PLOT函数线型设置及横坐标为字符串的代码实例
2.横坐标为字符串的代码实例 cell={‘PLS’,’SVM’,’RF’,’NNET’,’NB’,’PLR’,’C5.0′,’PDA’,’KNN’,’GLM’,’BCT’};%分类方法yData=[ ...
- EntityFramework 7 如何查看执行的 SQL 代码?
EF 其他版本:EntityFramework 如何查看执行的 SQL 代码? 在 EF7 中,并没有 Context.Database.Log 属性访问方式,但改变更加强大了,我们可以使用下面方式配 ...
- EntityFramework 如何查看执行的 SQL 代码?
在 VS 调试的时候,如果我们项目中使用的是 EntityFramework,查看 SQL 执行代码就不像 ADO.NET 那样直观了,我们需要设置下,可以参考下: How can I log the ...
- SQL/T-SQL实例参考
,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN C.Sco ...
随机推荐
- Canvas createLinearGradient API
createLinearGradient addColorStop <!DOCTYPE html> <html lang="en"> <head> ...
- MyBatis浅尝笔记
MyBatis应属于一种轻量级的java持久层技术,它通过简单的SQL xml或注解,将数据库数据映射到接口与POJO.最近项目要用到mybatis,所以学习之后在这里做个总结,文中的示例以xml配置 ...
- Redis系列三(redis配置文件分析)
在第一篇文章中有提到过redis.conf这个文件,这个文件就是redis-server的具体配置了.要使用好redis,一定要搞清楚redis的配置文件,这样才能最大的发挥redis的性能. # B ...
- C++ 头文件系列 (algorithm)
简介 algorithm头文件是C++的标准算法库,它主要应用在容器上. 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性. 因此,任何 ...
- (2)java程序走一遍工作流activiti
工作流从流程定义到创建一个流程实例完成执行步骤 使用activi-designer创建一个流程定义(.bpmn结尾的文件) 将定义好的流程定义和生成的png图片通过RepositoryService( ...
- LoRaWAN协议(七)--完整数据流程
以下的GW指Gateway 所用指令: root@lora-iot-sk:~# tcpdump -i lo -nn -x 'length>100' 入网流程 GW -> NS join_r ...
- uml系列(六)——行为图:活动&状态
说完uml的静态图了,说一下uml的动态的表示吧. uml的行为图,uml的行为图主要用来设计程序的行为.还是老规矩,先来张图: 行为图包含活动图和状态图两种. 先来说下活动图:活动图是由活动的节点和 ...
- 基于C++11的线程池,简洁且可以带任意多的参数
咳咳.C++11 加入了线程库,从此告别了标准库不支持并发的历史.然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现,譬如线程池.信号量等.线程池(thread pool) ...
- ConOS安装mysql5.7 及简单配置
安装 保证你的用户有权限 安装 没有 切换 root su root (su的意思:swich user) # rpm -ivh http://dev.mysql.com/get/mysql57- ...
- hadoop--安装1.2.1版本
hadoop的安装分为三种方式,第一种单机安装,一般用于调试(其实一般都不用).第二种,伪分布式安装,一般程序员开发会使用这种方式.第三种,分布式安装,在实际环境中应用.今天在这里记下的是第二种,即伪 ...