首先你这样的记录可以在录入的时候放在一条记录里!把你的字段用于记录交易
数量这样的字段再增加一个,使之分开:tiao(int),he(int)。如果不想改表结构这样的sql应该可以满足你的要求:
select t1.条数,t2.盒数,t1.关联字段,...............
from (select 条数,关联字段,.... from 交易表 where 交易类型=条) t1,
(select 盒数,关联字段,.... from 交易表 where 交易类型=盒) t2,
where t1.关联字段=t2.关联字段
注:关联字段是指能够表示某次交易的某种联系(交易时间或交易码),否则你无法知道某次交易的条数和盒数,从而导致无法关联!
数量这样的字段再增加一个,使之分开:tiao(int),he(int)。如果不想改表结构这样的sql应该可以满足你的要求:
select t1.条数,t2.盒数,t1.关联字段,...............
from (select 条数,关联字段,.... from 交易表 where 交易类型=条) t1,
(select 盒数,关联字段,.... from 交易表 where 交易类型=盒) t2,
where t1.关联字段=t2.关联字段
注:关联字段是指能够表示某次交易的某种联系(交易时间或交易码),否则你无法知道某次交易的条数和盒数,从而导致无法关联!
比如:
select * from tablea,tableb where (12*tablea.cola+tablea.colb) = tableb.cola;
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
(
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
你这个问题其实是程序设计时的问题,加一个字段其实是最好的解决方法。
如果必须用union的时候应该想想是不是在数据库设计上有了问题。
如果不能改变表结构,只能牺牲效率,实现功能了。
表名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
Up的都有分!
有的报表要合成一条,我为了复用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