WITH AS连用,也叫做子查询部分

WITH 通常与AS连用,也叫做子查询部分。
用法:
1). 可用来定义一个SQL片断,该片断会被整个 SQL语句 所用到。
           
2). 为了让 SQL语句 的可读性更高

3). 也有可能是在UNION ALL的不同部分,作为提供数据的部分。特别对于UNION ALL比较有
用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本
太高,所以可以使用WITH AS短语,则只要执行一遍即可。


例如:下面两种表达的是同一种意思:

          ①with alias as (select * from pra)

          ②select * from pra;

 with..as不能嵌套,但可以使用如下代码完成:
      ; with   as ( select   from   table_a),
    b  as  ( select  from  where  id  in (3,4,5))
    select    from   b
 

使用实例:从商户交易明细表中挑选出当天同一商户同一卡号发生的多笔交易

with t as (select mt_merchant_id,MT_TRXN_DATE,MT_TRXN_CARD_NO,count(mt_payable_amt) as  cnt  from cp_mertrx  
group by mt_merchant_id,MT_TRXN_DATE,MT_TRXN_CARD_NO order by mt_merchant_id,MT_TRXN_DATE,MT_TRXN_CARD_NO ) 
,b as ( select mt_merchant_id,MT_TRXN_DATE ,MT_TRXN_CARD_NO from t where t.cnt >1 order by MT_TRXN_DATE )
, c as (select   b.MT_TRXN_DATE ,b.mt_merchant_id,b.MT_TRXN_CARD_NO,MT_TRXN_TIME_HHMMSS,MT_TRXN_AMT
 from cp_mertrx  right join b on cp_mertrx.mt_merchant_id=b.mt_merchant_id and cp_mertrx.MT_TRXN_DATE=b.MT_TRXN_DATE and cp_mertrx.MT_TRXN_CARD_NO=b.MT_TRXN_CARD_NO ) 
select *  from c  order by  MT_TRXN_DATE ,mt_merchant_id,MT_TRXN_CARD_NO,MT_TRXN_TIME_HHMMSS
 
t 汇总同一天同一商户同一卡号的交易笔数
b 挑选出t中的多笔交易
c 根据b和商户明细表 组合挑选出需要的字段 (注意 使用join时字段名需要说明是哪张表,由于后期还需要使用b表,所以相关字段必须从b表中获取)
d 直接选取c中的数据




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值