首先你这样的记录可以在录入的时候放在一条记录里!把你的字段用于记录交易
数量这样的字段再增加一个,使之分开:tiao(int),he(int)。如果不想改表结构这样的sql应该可以满足你的要求:
select t1.条数,t2.盒数,t1.关联字段,...............
from (select 条数,关联字段,.... from 交易表 where 交易类型=条) t1,
     (select 盒数,关联字段,.... from 交易表 where 交易类型=盒) t2,
where t1.关联字段=t2.关联字段
注:关联字段是指能够表示某次交易的某种联系(交易时间或交易码),否则你无法知道某次交易的条数和盒数,从而导致无法关联!

解决方案 »

  1.   

    ashzs((可以包含中文字符)) 的思路已经很清楚了,楼主可以参照着做了。不一定要别人把详细的SQL写出来了。
      

  2.   

    你可以计算后在连接啊!
    比如:
    select * from tablea,tableb where (12*tablea.cola+tablea.colb) = tableb.cola;
      

  3.   

    ashzs((可以包含中文字符)) 你作内聯結 會丟失數據啊!黨一個訂單只有盒或條的時候,連不到數據但是那種情況也是我要的
      

  4.   

    那就用外连接
    select h.num,b.num,h.id from
    (select num,id from aaa where tpe='h') h,
    (select num,id from aaa where tpe='b') b
    where h.id=b.id(+)
    union
    select h.num,b.num,h.id from
    (select num,id from aaa where tpe='h') h,
    (select num,id from aaa where tpe='b') b
    where h.id(+)=b.id
      

  5.   

    bisliu(努力学习oracle!) 的方法是一个可行的方法。我也曾碰到过这样的问题,不管从哪边连都可能出现数据丢失,也想不出什么好的办法解决,只好用union,虽然效率低点,但终归能解决问题。
      

  6.   

    我的意思是查兩遍速度是不是比用Union 快?????????
      

  7.   

    ashzs((可以包含中文字符)) 的正确!我就是这么做的!
      

  8.   

    自己搞定!!!!!!
          (
                 CASE WHEN SHIP_JS_TBL.FORM_CD='CA' THEN
                     SUM(SHIP_JS_TBL.UNITS) 
                ELSE 
                   0 
                END
           ) as CA_UNITS,
           (
                CASE WHEN SHIP_JS_TBL.FORM_CD='BL' THEN" 
                    SUM(SHIP_JS_TBL.UNITS) 
                ELSE 
                   0 
                END
           ) as BL_UNITS
      

  9.   

    哦!才看见。用union可以解决问题。
    你这个问题其实是程序设计时的问题,加一个字段其实是最好的解决方法。
    如果必须用union的时候应该想想是不是在数据库设计上有了问题。
    如果不能改变表结构,只能牺牲效率,实现功能了。
      

  10.   

    哈哈!这次真的搞定了!举例说明
    表名TABLE1 字段 ItemId,Type,Units
    主键  ItemId,TypeSELECT ItemID,Sum(CA)AS CA_Units,SUM(BL)AS BL_Units
    FROM
    (SELECT  
    ItemId,
    (CASE WHEN Type='CA' THEN sum(Units)ELSE 0 END)AS CA,
    (CASE WHEN  Type ='BL' THEN sum(Units) ELSE 0  END)AS BL
    FROM            TABLE1GROUP BY 
    ItemId,Type
    )AS TABLE2GROUP BY ItemId
    ORDER BY ItemId
      

  11.   

    大家可以在SQLSEREVER的幫助上察看“交叉数据报表”,比我寫的明白!
    Up的都有分!
      

  12.   

    我的项目情况比较复杂,有的报表要求分开,
    有的报表要合成一条,我为了复用GROUP BY 了两次。
    这样写更简单:
    SELECT  
    ItemId,
    sum(CASE WHEN Type='CA' THEN Units ELSE 0 END)AS CA,
    sum(CASE WHEN Type ='BL' THEN Units ELSE 0  END)AS BL
    FROM            TABLE1GROUP BY 
    ItemId