现在我有一个记录商品交易的表:id(int) name(nvchar) quantity(float) price(float) flagSepecil(bit) retreatId(int)100 AAA 1 50.5 0 NULL
101 BBB 3 100 0 NULL
102 BBB -1 100 0 101
103 CCC 1 80 1 NULL
104 CCC 1 80 1 NULL
105 CCC 1 80 1 NULL
106 CCC -1 80 1 105
说明:商品分为两种(由flagSepecil区分,1表示特殊商品,这种商品每份在数据库中都是单独的一条记录,如上表中的103-105的CCC;0表示普通商品,这种商品记录多份在数据库中是合在一起的一条记录,如上表中的101的BBB,quantity为-的表示退货的记录,对应的退货的编号是retreatId中记录的,如上表中的102的retreatId为101,说明这条记录是101的退货记录,106的retreatId为105,说明是105的退货记录)。现在在查询时希望能将退货记录与其相应的原纪录合并在一起,得到如下的表:
100 AAA 1 50.5 0 NULL
101 BBB 2 100 0 NULL
103 CCC 1 80 1 NULL
104 CCC 1 80 1 NULL
105 CCC 0 80 1 NULL我前面因为没有这种特殊商品所以都是直接按照name进行group,然后将SUM(quantity)就好了,但是加了这个特殊商品后发现他把特殊商品也全部group在一起了,请问改如何处理呢???
101 BBB 3 100 0 NULL
102 BBB -1 100 0 101
103 CCC 1 80 1 NULL
104 CCC 1 80 1 NULL
105 CCC 1 80 1 NULL
106 CCC -1 80 1 105
说明:商品分为两种(由flagSepecil区分,1表示特殊商品,这种商品每份在数据库中都是单独的一条记录,如上表中的103-105的CCC;0表示普通商品,这种商品记录多份在数据库中是合在一起的一条记录,如上表中的101的BBB,quantity为-的表示退货的记录,对应的退货的编号是retreatId中记录的,如上表中的102的retreatId为101,说明这条记录是101的退货记录,106的retreatId为105,说明是105的退货记录)。现在在查询时希望能将退货记录与其相应的原纪录合并在一起,得到如下的表:
100 AAA 1 50.5 0 NULL
101 BBB 2 100 0 NULL
103 CCC 1 80 1 NULL
104 CCC 1 80 1 NULL
105 CCC 0 80 1 NULL我前面因为没有这种特殊商品所以都是直接按照name进行group,然后将SUM(quantity)就好了,但是加了这个特殊商品后发现他把特殊商品也全部group在一起了,请问改如何处理呢???
解决方案 »
- (很菜的问题)在查询中需要指定非聚集索引吗?表里有很多个非聚集索引不知道怎么使用
- 请问如何在让Instead of update 触发器执行update原本的功能?
- 请教 SQL数据库如何打包?
- 菜鸟问题:在存储过程中执行只执行到alter,请问怎么办
- 请教关于datetime类型字段做更新操作的奇怪问题
- 存储过程计算多条记录的平均值
- SQL的问题(多对多)........
- 我讨厌VFP数据库,你知道是怎么回事吗?水深火热的小妹妹!!!
- 怎样把数据库中所有表的所有字段的字段类型,字段长度等设计时的基本信息用Sql检索出来
- sql拼接中对output变量赋值
- sql server 2000 解锁问题
- 关于row_number分页的存储过程,求帮忙啊
if OBJECT_ID('commodity') is not null drop table commodity
create table commodity(
id int identity(100,1),
name nvarchar(50),
quantity float,
price float,
flagSepecil bit,
retreatId int
)insert into commodity(name,quantity,price,flagSepecil,retreatId)
select 'AAA',1,50.5,0,NULL union all
select 'BBB',3,100,0,NULL union all
select 'BBB',-1,100,0,101 union all
select 'CCC',1,80,1,NULL union all
select 'CCC',1,80,1,NULL union all
select 'CCC',1,80,1,NULL union all
select 'CCC',-1,80,1,105
select c.id,c.name,c.quantity+isnull(d.quantity,0) as quantity,c.price,c.flagSepecil,c.retreatId from commodity as c
left join commodity as d on c.id=d.retreatId
where c.quantity>0
/*结果
id name quantity price flagSepecil retreatId
100 AAA 1 50.5 0 NULL
101 BBB 2 100 0 NULL
103 CCC 1 80 1 NULL
104 CCC 1 80 1 NULL
105 CCC 0 80 1 NULL
*/
--删除测试表
drop table commodity