with as 和 临时表的区别。

1.with as 

with as 只是把子查询的语句当作了一个表,但是真实的数据并没有插入到数据库,它的好处是增加了代码的可读性和进行维护。

--设计累计发生
with ljfssj as (
	select b.ProjGUID,
		COUNT(*) Ljfscs,										--累计发生次数
		SUM(ISNULL(a.ApproveAmount_Bz,0)) ljfsAmount			--累计发生金额
	from cb_DesignAlterToContract a
	left join cb_DesignAlter b on a.DesignAlterGuid = b.DesignAlterGUID
	where b.ApproveStatusEnum = 3 and b.x_IsManagement <> 1 and b.ReportDate <= @jzdate group by b.ProjGUID
),

--设计本期发生
bqfssj as (
	select b.ProjGUID,
		COUNT(*) bqfscs,										--本次发生次数
		SUM(ISNULL(a.ApproveAmount_Bz,0)) bqfsAmount			--本次发生金额
	from cb_DesignAlterToContract a
	left join cb_DesignAlter b on a.DesignAlterGuid = b.DesignAlterGUID
	where b.ApproveStatusEnum = 3 and b.x_IsManagement <> 1 and b.ReportDate between @ksdate and @jzdate group by b.ProjGUID
),

--设计累计确认
ljqrsj as (
	select b.ProjGUID,
		COUNT(*) ljqrcs,										--累计确认次数
		SUM(ISNULL(c.ValidationAmount_Bz,0)) ljqrAmount			--累计确认金额
	from cb_DesignAlterToContract a
	inner join cb_DesignAlter b on a.DesignAlterGuid = b.DesignAlterGUID
	left join cb_DesignAlterZJSP c on a.DesignAlterGuid = c.DesignAlterGUID and a.ContractGUID = c.ContractGUID
	where b.ApproveStatusEnum = 3 and b.x_IsManagement <> 1 and b.ReportDate <= @jzdate group by b.ProjGUID
)

2.临时表

临时表的数据是需要插入到数据库的,所以一般用于做报表的话,在插入数据之后需要删除临时表。

if OBJECT_ID('tempdb..#f1') is not null 
drop table #f1
SELECT 
				Getin.ProjGUID,
				Getin.BldGUID,
				Getin.TopProductTypeGUID,
				SUM(ISNULL(CurrGetin.CurrHjAmount, 0)) AS F1
			into #f1 FROM   data_wide_s_Getin  Getin WITH(NOLOCK)
					LEFT JOIN ( SELECT   GetinGUID,
										SUM(CASE WHEN ItemType='非贷款类房款'
														AND IsFk = 1
														OR ItemNameGUID = '9165FAED-227A-465D-AA5D-D24BED655677' /*银行按揭*/
														OR ItemNameGUID = 'C3190DC3-C295-4A98-B7AC-9DFF7D7A0091' /*公积金*/ THEN ISNULL(RmbAmount, 0)ELSE 0 END) AS CurrHjAmount
								FROM     data_wide_s_Getin WITH(NOLOCK)
								WHERE    
										--ProjGUID IN (@ProjGuids)
								--        AND 
										VouchStatus <> '作废'
										AND CONVERT(VARCHAR(100), SkDate, 23) >= CONVERT(VARCHAR(100), @BeginDate, 23)
										AND CONVERT(VARCHAR(100), SkDate, 23) <= CONVERT(VARCHAR(100), @EndDate, 23)
								GROUP BY GetinGUID ) AS CurrGetin
						ON Getin.GetinGUID = CurrGetin.GetinGUID
			GROUP BY Getin.ProjGUID,Getin.BldGUID,Getin.TopProductTypeGUID

3.运行效率

用with as ,其实跟直接用子查询效率上没有什么区别;而用临时表与永久表相似,数据是真是跑入到数据库里面去的,相当于第二次直接关联的是一个小表,查询效率大大提高。

4.应用场景

临时表适用于:有很多复杂的关联子表查询。

with as 适用于:为了增加代码可读性,且没有很多复杂的关联子查询。

  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值