日期:2014-05-18  浏览次数:20592 次

查询求和?
有张数据库表
商品名称               大类             数量             单价                 总价             日期
数码相机               数码类           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

我要查询商品名称日期小于2007-02-05里最大日期的总价之和,并按大类列出,效果如下:

数码类               11600
配件类                 400

------解决方案--------------------
Select 大类,总价和=sum(总价)
from 表 as t where not exists(
Select * from 表 where 大类=t.大类 and 日期> t.日期)
------解决方案--------------------
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 '

select * from 表

-- select 大类,总量
-- from
-- (
-- select 大类,商品名称 ,max(总价) as 总量 from 表
-- group by 大类,商品名称
-- having max(日期) < '2007-02-05 '
-- ) as x

select
大类,
总和=sum(总价)
from
表 a
where
not exists(select * from 表 where 大类=a.大类 and 日期> a.日期)
group by
大类
having
max(日期) < '2007-02-05 '

drop table 表

/*
大类 总和
----------------
配件类 400
数码类 11600
*/

------解决方案--------------------
create table Shopping
(
商品名称 nvarchar(255) null ,
大类 nvarchar(255) null ,
数量 int null,
单价 int null,
总价 as 数量*单价,
日期 datetime
)

go
insert into Shopping(商品名称,大类,数量,单价,日期)
select '数码相机 ', '数码类 ',2,2