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代码实例的更多相关文章

  1. sql注入实例分析

    什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具 ...

  2. (4.22)Microsoft 管理控制台启用 SSL 加密的 SQL Server 实例

    如何通过使用 Microsoft 管理控制台启用 SSL 加密的 SQL Server 实例 关键词:MSSQL加密,sql server加密,sql server客户端与服务器传输内容加密 转自:h ...

  3. 使用Phoenix将SQL代码移植至HBase

    1.前言 HBase是云计算环境下最重要的NOSQL数据库,提供了基于Hadoop的数据存储.索引.查询,其最大的优点就是可以通过硬件的扩展从而几乎无限的扩展其存储和检索能力.但是HBase与传统的基 ...

  4. IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)

    IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...

  5. C#读写Access数据库、表格datagridview窗体显示代码实例

    C#读写Access数据库.表格datagridview窗体显示代码实例 最近项目中用到C#对于Access数据库表读写.mdb操作,学习了下相关的东西,这里先整理C#对于Access数据库的操作,对 ...

  6. MATLAB的PLOT函数线型设置及横坐标为字符串的代码实例

    2.横坐标为字符串的代码实例 cell={‘PLS’,’SVM’,’RF’,’NNET’,’NB’,’PLR’,’C5.0′,’PDA’,’KNN’,’GLM’,’BCT’};%分类方法yData=[ ...

  7. EntityFramework 7 如何查看执行的 SQL 代码?

    EF 其他版本:EntityFramework 如何查看执行的 SQL 代码? 在 EF7 中,并没有 Context.Database.Log 属性访问方式,但改变更加强大了,我们可以使用下面方式配 ...

  8. EntityFramework 如何查看执行的 SQL 代码?

    在 VS 调试的时候,如果我们项目中使用的是 EntityFramework,查看 SQL 执行代码就不像 ADO.NET 那样直观了,我们需要设置下,可以参考下: How can I log the ...

  9. SQL/T-SQL实例参考

    ,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN C.Sco ...

随机推荐

  1. 如何测试LBS功能

    在LBS功能的开发中,为了保证通用性,服务器存在的坐标是基于wgs84的,这个通常由GPS设备传过来,对于PC来说,如何获得这个值呢?可以利用Google Earth来获得,并修改显示的坐标系统,“工 ...

  2. ZeroMQ 的模式

    在需要并行化处理数据的时候,采用消息队列通讯的方式来协作,比采用共享状态的方式要好的多.Erlang ,Go 都使用这一手段来让并行任务之间协同工作. 最近读完了 ZeroMQ 的 Guide.写的很 ...

  3. nginx安装配置

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,其特点是占有内存少,并发能力强 1. apache ...

  4. python中关于字符串的操作

    Python 字符串操作方法大全 python字符串操作实方法大合集,包括了几乎所有常用的python字符串操作,如字符串的替换.删除.截取.复制.连接.比较.查找.分割等,需要的朋友可以参考下 1. ...

  5. CODEFORCES 125E MST Company 巧用Kruskal算法

    题意:给定一个带权边无向图,求最小生成树,且满足第一个节点的度为固定的k 无解则输出-1 数据规模: 节点数n和限制k<=5000 边数m<=10^5 时限8sec 思路: 首先时限比较宽 ...

  6. Swift资料大全

    简单看了一下swift的语法,个人感觉相对于object-c很是简单明了.Swift的出现并不能说明iOS开发简单了很多,有可能会变得复杂,你需要学习两门编程语言,因为在程序员的世界里,务实并不是最重 ...

  7. HDU 1006 [Tick Tick]时钟问题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1006 题目大意:钟表有时.分.秒3根指针.当任意两根指针间夹角大于等于n°时,就说他们是happy的, ...

  8. JDK分析工具&JVM垃圾回收(转)

    转自:http://blog.163.com/itjin45@126/blog/static/10510751320144201519454/ 官方手册:http://docs.oracle.com/ ...

  9. asp.net权限认证篇外:集成域账号登录

    在之前的我们已经讲过asp.net权限认证:Windows认证,现在我们来讲讲域账号登录, 这不是同一件事哦,windows认证更多的是对资源访问的一种权限管控,而域账号登录更多的是针对用户登录的认证 ...

  10. How To Ask Questions The Smart Way 转

    先查后问多思考莫做伸手党. 原文链接 译文链接