日期:2014-05-17  浏览次数:20798 次

请大师指点迷津-关于sql查询

   有一张地铁乘客进出闸机的详细交易表,里面的重要字段有以下几个:

   交易时间、交易设备号、乘客卡号、交易类型(进出站区分)、票卡类型(有很多票种)、线路编号、交易站点等字段。


   现在想按照以下结果进行查询

乘客卡号、 票卡类型、 进站交易时间、 进站设备号、 进站站点、 出站交易时间、 出站设备号、 出站站点

   原始表乘客卡号是不唯一的,因为会出现一天有很多次进出站记录,所以要按照最准确的一进一出匹配查询,如果某一张卡的交易不完整,缺少进或出的记录,查询结果就把记录该字段(进或出)信息填“空”  
   
    谢谢

  

------解决方案--------------------

with TB as
 (select 交易时间,
         交易设备号,
         乘客卡号,
         交易类型,
         票卡类型,
         线路编号,
         交易站点,
         lead(交易时间) over(order by 交易时间 nulls last) 下次时间,
         lead(交易类型) over(order by 交易时间 nulls last) 下次交易类型,
         lead(交易站点) over(order by 交易时间 nulls last) 下次交易地点,
         lead(交易设备号) over(order by 交易时间 nulls last) 下次交易设备号
    from 详细交易表)
select 乘客卡号,
       票卡类型,
       交易时间 进站交易时间,
       交易设备号 进站设备号,
       交易站点 进站站点,
       decode(下次交易类型, '出站', 下次时间, NULL) 出站交易时间,
       decode(下次交易类型, '出站', 交易设备号, NULL) 出站设备号,
       decode(下次交易类型, '出站', 下次交易地点, NULL) 出站站点
  from TB
 where 交易类型 = '进站'