首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

任意查询求和?解决办法

2012-01-06 
任意查询求和?有张数据库表商品名称大类数量单价总价日期数码相机数码类2250050002007-02-01U盘配件类3200

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

热点排行