有2个表:【A表】和【B表】;
----------------------------------------------------------------
1、【A表】字段:
日期 货品编号 单据号 销售数量 销售金额
08/05/04 001 1 20 2000
08/06/04 002 2 10 1000
08/06/08 001 3 30 3000
08/06/09 002 4 70 7000
08/06/09 003 5 10 1000
-----------------------------------------------------------------
2、【B表】字段:
日期 货品编号 单据号 销售数量 销售金额 状态
08/05/04 001 1 10 1000 C
08/06/04 002 2 10 1000 R
08/06/08 001 3 10 1000 R
08/06/09 002 4 10 1000 C
-----------------------------------------------------------------
【说明】:两个表中的【日期】和【单据号】都是相对应的; 【描述】:1.首先分组统计出在限定时间段内【A表】中各【货品编号】的【销售数量】和【销售金额】的总和;
2.用【A表】中各分组统计的结果与【B表】中的各项进行“加减运算”注:(当【状态】项="C" 时 与【A表】中的【货品编码】项相同的数据进行 “减法 - ”运算);
反之【状态】项=“R”则进行"加法 + "运算; 【结果】:1.再分组合计出运算后的【货品编号】字段项;
2.结果要是在【日期>=08/06/04 and 日期 <=08/06/10】时间段内的!
------------------------------------------------------------------------------------------------------
结果如下:
货品编号 销售数量 销售金额
001 50 5000
002 80 8000
003 10 1000
------------------------------------------------------------
求SQL语句的写法!谢谢!
之前的问题一直没有解决,还请高手帮忙解决!先谢谢大家了!
----------------------------------------------------------------
1、【A表】字段:
日期 货品编号 单据号 销售数量 销售金额
08/05/04 001 1 20 2000
08/06/04 002 2 10 1000
08/06/08 001 3 30 3000
08/06/09 002 4 70 7000
08/06/09 003 5 10 1000
-----------------------------------------------------------------
2、【B表】字段:
日期 货品编号 单据号 销售数量 销售金额 状态
08/05/04 001 1 10 1000 C
08/06/04 002 2 10 1000 R
08/06/08 001 3 10 1000 R
08/06/09 002 4 10 1000 C
-----------------------------------------------------------------
【说明】:两个表中的【日期】和【单据号】都是相对应的; 【描述】:1.首先分组统计出在限定时间段内【A表】中各【货品编号】的【销售数量】和【销售金额】的总和;
2.用【A表】中各分组统计的结果与【B表】中的各项进行“加减运算”注:(当【状态】项="C" 时 与【A表】中的【货品编码】项相同的数据进行 “减法 - ”运算);
反之【状态】项=“R”则进行"加法 + "运算; 【结果】:1.再分组合计出运算后的【货品编号】字段项;
2.结果要是在【日期>=08/06/04 and 日期 <=08/06/10】时间段内的!
------------------------------------------------------------------------------------------------------
结果如下:
货品编号 销售数量 销售金额
001 50 5000
002 80 8000
003 10 1000
------------------------------------------------------------
求SQL语句的写法!谢谢!
之前的问题一直没有解决,还请高手帮忙解决!先谢谢大家了!
select 日期 ,货品编号,sum(销售数量),sum(销售金额) from ta group by 日期 ,货品编号
create table A(日期 datetime,货品编号 varchar(10), 单据号 int, 销售数量 int, 销售金额 int)
insert into A values('08/05/04' , '001' , 1 , 20 , 2000)
insert into A values('08/06/04' , '002' , 2 , 10 , 1000)
insert into A values('08/06/08' , '001' , 3 , 30 , 3000)
insert into A values('08/06/09' , '002' , 4 , 70 , 7000)
insert into A values('08/06/09' , '003' , 5 , 10 , 1000)
create table B(日期 datetime, 货品编号 varchar(10), 单据号 int, 销售数量 int, 销售金额 int, 状态 varchar(1))
insert into B values('08/05/04' , '001' , 1 , 10 , 1000 , 'C')
insert into B values('08/06/04' , '002' , 2 , 10 , 1000 , 'R')
insert into B values('08/06/08' , '001' , 3 , 10 , 1000 , 'R')
insert into B values('08/06/09' , '002' , 4 , 10 , 1000 , 'C') select 货品编号 , sum(销售数量) 销售数量 , sum(销售金额) 销售金额 from
(
select 货品编号 , sum(销售数量) 销售数量 , sum(销售金额) 销售金额 from A where 日期 between '08/06/04' and '08/06/10' group by 货品编号
union all
select 货品编号 , sum(case when 状态 = 'C' then - 销售数量 else 销售数量 end) 销售数量 , sum(case when 状态 = 'C' then - 销售金额 else 销售金额 end) 销售金额 from B where 日期 between '08/06/04' and '08/06/10' group by 货品编号
) t
group by 货品编号drop table A , B/*
货品编号 销售数量 销售金额
---------- ----------- -----------
001 40 4000
002 80 8000
003 10 1000(所影响的行数为 3 行)
*/--即使把日期08/05/04 改为08/06/04 ,你的结果仍然不对.
create table A(日期 datetime,货品编号 varchar(10), 单据号 int, 销售数量 int, 销售金额 int)
insert into A values('08/06/04' , '001' , 1 , 20 , 2000)
insert into A values('08/06/04' , '002' , 2 , 10 , 1000)
insert into A values('08/06/08' , '001' , 3 , 30 , 3000)
insert into A values('08/06/09' , '002' , 4 , 70 , 7000)
insert into A values('08/06/09' , '003' , 5 , 10 , 1000)
create table B(日期 datetime, 货品编号 varchar(10), 单据号 int, 销售数量 int, 销售金额 int, 状态 varchar(1))
insert into B values('08/06/04' , '001' , 1 , 10 , 1000 , 'C')
insert into B values('08/06/04' , '002' , 2 , 10 , 1000 , 'R')
insert into B values('08/06/08' , '001' , 3 , 10 , 1000 , 'R')
insert into B values('08/06/09' , '002' , 4 , 10 , 1000 , 'C') select 货品编号 , sum(销售数量) 销售数量 , sum(销售金额) 销售金额 from
(
select 货品编号 , sum(销售数量) 销售数量 , sum(销售金额) 销售金额 from A where 日期 between '08/06/04' and '08/06/10' group by 货品编号
union all
select 货品编号 , sum(case when 状态 = 'C' then - 销售数量 else 销售数量 end) 销售数量 , sum(case when 状态 = 'C' then - 销售金额 else 销售金额 end) 销售金额 from B where 日期 between '08/06/04' and '08/06/10' group by 货品编号
) t
group by 货品编号drop table A , B/*
货品编号 销售数量 销售金额
---------- ----------- -----------
001 50 5000
002 80 8000
003 10 1000(所影响的行数为 3 行)
*/
应该是【日期>=08/05/04 and 日期 <=08/06/10】
( SELECT 货品编号,sum(销售数量)销售数量,sum(销售金额)销售金额 FROM A
WHERE 日期>='2008/06/04' and 日期 <='2008/06/10' GROUP BY 货品编号
)TA left join B on TA.货品编号=TB.货品编号 where TB.状态='C'
go
create table #a( 日期 varchar(10),货品编号 varchar(10), 单据号 int, 销售数量 int, 销售金额 int)
insert #a select '08/05/04' , '001' , 1 , 20 , 2000
insert #a select '08/06/04' , '002' , 2 , 10 , 1000
insert #a select '08/06/08' , '001' , 3 , 30 , 3000
insert #a select '08/06/09' , '002' , 4 , 70 , 7000
insert #a select '08/06/09' , '003' , 5 , 10 , 1000
-----------------------------------------------------------------
if object_id('tempdb..#b')is not null drop table #b
go
create table #b( 日期 varchar(10),货品编号 varchar(10), 单据号 int, 销售数量 int, 销售金额 int,状态 varchar(10))
insert #b select '08/05/04' , '001' , 1, 10 , 1000 , 'C'
insert #b select '08/06/04' , '002' , 2 , 10 , 1000 , 'R'
insert #b select '08/06/08' , '001' , 3 , 10 , 1000 , 'R'
insert #b select '08/06/09' , '002' , 4 , 10 , 1000 , 'C'select 货品编号 , sum(销售数量) 销售数量 , sum(销售金额) 销售金额 from
(
select 货品编号 , sum(销售数量) 销售数量 , sum(销售金额) 销售金额 from #a where 日期 between '08/06/04' and '08/06/10' group by 货品编号
union all
select 货品编号 , sum(case when 状态 = 'C' then - 销售数量 else 销售数量 end) 销售数量 , sum(case when 状态 = 'C' then - 销售金额 else 销售金额 end) 销售金额 from #B where 日期 between '08/06/04' and '08/06/10' group by 货品编号
) t
group by 货品编号
/*
货品编号 销售数量 销售金额
---------- ----------- -----------
001 40 4000
002 80 8000
003 10 1000
*/
( SELECT 货品编号,sum(销售数量)销售数量,sum(销售金额)销售金额 FROM A
WHERE 日期>='2008/05/04' and 日期 <='2008/06/10' GROUP BY 货品编号
)TA left join B TB on TA.货品编号=TB.货品编号 and TB.状态='C'
@date1 datetime,
@date2 datetime
select 货品编号,销售数量=sum(case when 状态=C then a.销售数量-B.销售数量
when 状态=R then a.销售数量-B.销售数量
end)
,销售金额 =sum(case when 状态=C then aa.销售金额-B.销售金额
when 状态=R then aa.销售金额-B.销售金额
end)
from B,(select 货品编号,销售数量=sum(销售数量),销售金额=sum(销售金额) from A where
日期>=@date1 and 日期<=@date2 group by 货品编号)aa
where B.货品编号=aa.货品编号
group by 货品编号