有一个表A 如下
票据号  姓名   买卖  金额
1       张三    买   100
1       李四    卖   100
2       小王    买   500
2       小马    卖   500现在通过一个sql(不用视图)实现如下输出票据号  买方姓名 卖方姓名 金额
1       张三      李四    100
2       小王      小马    500
oracle 中有decode函数是否可以实现呢?

解决方案 »

  1.   

    select a.票据号,a.姓名, b.姓名, a.金额
      from 
    (select 票据号,姓名,金额 from a where 买卖 = '买')ta 
     inner join 
    (select 票据号,姓名,金额 from a where 买卖 = '卖')tb
    on a.票据号 = b.票据号
      

  2.   

    select ta.票据号,ta.姓名, tb.姓名, ta.金额
    from 
    (select 票据号,姓名,金额 from a where 买卖 = '买')ta ,
    (select 票据号,姓名,金额 from a where 买卖 = '卖')tb
    where ta.票据号 = tb.票据号 and ta.金额 = tb.金额
      

  3.   

    select a.票据号,a.姓名 买方,b.姓名 卖方,a.金额 金额 from A a,A b where a.票据号=b.票据号 and a.姓名<>b.姓名 and a.买卖='买'
      

  4.   

    select
        票据号,
        max(decode(买卖,'买',姓名)) as 买方姓名,
        max(decode(买卖,'卖',姓名)) as 卖方姓名,
        金额 
    from 
        表A 
    group by 
        票据号,金额select  
        a.票据号,
        a.姓名 as 买方姓名,
        b.姓名 as 卖方姓名,
        a.金额
    from 
        表A a,
        表A b 
    where 
        a.票据号=b.票据号 
        and
        a.金额=b.金额 
        and 
        a.买卖='买' 
        and 
        b.买卖='卖'
      

  5.   

    这个超难么 原始数据的条件倒是要考虑的
    libin_ftsafe(子陌红尘:当libin告别ftsafe)的第一个sql文就注意到了避免重复票据号的问题
    比如有三个或者以上的相同票据号
      

  6.   

    select  t.票据号,
              max( t.买方姓名) as 买方姓名,
              max( t.卖方姓名) as 卖方姓名,
              t.金额
    from 
    (select a1.票据号,
        decode(a1.买卖,'买'a.姓名,null) as 买方姓名,
        decode(a1.买卖,'卖'a.姓名,null) as 卖方姓名,
        a1.金额
    from 表 a1,表 a2
    on a1.票据号 = a2.票据) t
    group by t.票据号
    order by  t.票据号
      

  7.   

    把table 变成table1 和 table2
    作票号的等值并且姓名的不等值连接,成这样
    1       张三    买   100   1       李四    卖   100
    1       李四    卖   100   1       张三    买   100
    2       小王    买   500   2       小马    卖   500
    2       小马    卖   500   2       小王    买   500 
    然后根据买卖关系decode成:
    1       张三    买   100   1       李四    卖   100
    1       张三    买   100   1       李四    卖   100
    2       小王    买   500   2       小马    卖   500
    2       小王    买   500   2       小马    卖   500
    然后再distinct一下何必说很难呢!
    呵呵
      

  8.   

    我也遇到过此类问题,但不会像楼主所说的“超难!”,用decode()函数就比较容易实现!
      

  9.   

    谢谢各位的回答,问题己解决,用decode函数可以实现上述问题,用视图(或嵌套sql)均可实现