任意查询求和?
有张数据库表
商品名称 大类 数量 单价 总价 日期
数码相机 数码类 2 2500 5000 2007-02-01
U盘 配件类 3 200 600 2007-01-01
数码相机 数码类 1 2600 2600 2007-02-02
数码复印机 数码类 1 9000 9000 2007-02-02
U盘 配件类 2 200 400 2007-02-03
U盘 配件类 2 250 500 2007-02-04
测试数据:
create table 表(商品名称 varchar(100), 大类 varchar(100), 数量 int, 单价 int, 总价 int, 日期 datetime)
insert 表 select '数码相机 ', '数码类 ', 2, 2500, 5000, '2007-02-01 '
union all select 'U盘 ', '配件类 ', 3, 200, 600, '2007-01-01 '
union all select '数码相机 ', '数码类 ', 1, 2600, 2600, '2007-02-02 '
union all select '数码复印机 ', '数码类 ', 1, 9000, 9000, '2007-02-02 '
union all select 'U盘 ', '配件类 ', 2, 200, 400, '2007-02-03 '
union all select 'U盘 ', '配件类 ', 2, 250, 500, '2007-02-04 '
我要查询商品名称日期小于2007-02-05里最大日期的总价之和,并按大类列出,效果如下:
数码类 11600
配件类 500
如果我查询日期小于2007-02-04里最大日期的总价之和,效果应该是:
数码类 11600
配件类 400
如果我查询日期小于2007-02-02里最大日期的总价之和,效果应该是:
数码类 5000
配件类 600
[解决办法]
select a.大类,sum(a.总价) as 总价
from 表 a
where 日期=(select max(日期) from 表 where 大类=a.大类 and 日期 < '2007-02-05 ')
group by a.大类
[解决办法]
--錯了, 改改
--1
select 大类, 总价=sum(总价) from 表 as tmp
where not exists(select 1 from 表 where 大类=tmp.大类 and 日期 < '2007-02-05 ' and 日期> tmp.日期)
group by 大类
order by 2 desc
--result
大类 总价
---------------------------------------------------------------- -----------
数码类 11600
配件类 500
(2 row(s) affected)
[解决办法]
select 大类,sum(总价) from tb a where 日期=(
select max(日期) from tb b where b.大类=a.大类 and 日期 < '2007-02-04 '
)
group by 大类
[解决办法]
create table tb(goods varchar(100),kind varchar(100), num int, price int, sumprice int, daytime datetime)
insert tb select '数码相机 ', '数码类 ', 2, 2500, 5000, '2007-02-01 '
union all select 'U盘 ', '配件类 ', 3, 200, 600, '2007-01-01 '
union all select '数码相机 ', '数码类 ', 1, 2600, 2600, '2007-02-02 '
union all select '数码复印机 ', '数码类 ', 1, 9000, 9000, '2007-02-02 '
union all select 'U盘 ', '配件类 ', 2, 200, 400, '2007-02-03 '
union all select 'U盘 ', '配件类 ', 2, 250, 500, '2007-02-04 '
go
create proc tmp
(
@daytime datetime
)
as
select @daytime=convert(varchar(10),@daytime,120)
select kind,num=sum(sumprice) from tb where daytime <@daytime group by kind
go
exec tmp '2007-02-05 '
--results
配件类1500
数码类16600