比如 一张表中 A商品 2009-1-24,25 有数据 2009-2-23,28 有数据 2009-3-5,25,27有数据 就要以 A商品1月25 2月28 3月27为条件 这我实现了
select max(cast(gday as int)) from goodsrecord
where goosid='A' group by gyear,gmonth但我是以这3天为条件 分别查处A商品1月25 2月28 3月27 的数据 于是我写了
select GoosID '编号',sum(gsum) '本月结存',gyear+'-'+gmonth as '时间' from GoodsRecord
where goosid='A' and gday in (select max(cast(gday as int)) from goodsrecord
where goosid='A' group by gyear,gmonth) group by goosid,gyear+'-'+gmonth我用的IN 和 sum(gsum)效果显而易见了 1月有24,25号 3月有5,25,27号 那么三月查处的是25+27号的和 因为IN后面的条件中有in(25,28,27) 3月有25和27号 又因为sum(gsum)于是3月查出来的有问题 我想问in后面的25,28,27 怎么对应1月2月3月 而不是有25,27 3月就把25,27的数据全求和了 只要有27的数据就行了 帮帮忙呀 困恼了我5天了
select max(cast(gday as int)) from goodsrecord
where goosid='A' group by gyear,gmonth但我是以这3天为条件 分别查处A商品1月25 2月28 3月27 的数据 于是我写了
select GoosID '编号',sum(gsum) '本月结存',gyear+'-'+gmonth as '时间' from GoodsRecord
where goosid='A' and gday in (select max(cast(gday as int)) from goodsrecord
where goosid='A' group by gyear,gmonth) group by goosid,gyear+'-'+gmonth我用的IN 和 sum(gsum)效果显而易见了 1月有24,25号 3月有5,25,27号 那么三月查处的是25+27号的和 因为IN后面的条件中有in(25,28,27) 3月有25和27号 又因为sum(gsum)于是3月查出来的有问题 我想问in后面的25,28,27 怎么对应1月2月3月 而不是有25,27 3月就把25,27的数据全求和了 只要有27的数据就行了 帮帮忙呀 困恼了我5天了
CREATE TABLE goodsrecord(
id INT IDENTITY
,goosid NVARCHAR(30)
,gyear INT
,gmonth INT
,gday INT
,gsum FLOAT
)
GOINSERT goodsrecord(goosid,gyear,gmonth,gday,gsum)
SELECT 'A',2009,1,24,10
UNION
SELECT 'A',2009,1,25,20
UNION
SELECT 'A',2009,2,23,30
UNION
SELECT 'A',2009,2,28,40
UNION
SELECT 'A',2009,3,5,50
UNION
SELECT 'A',2009,3,25,60
UNION
SELECT 'A',2009,3,27,70
GOSELECT a.*
FROM goodsrecord a
INNER JOIN (
SELECT gyear,gmonth ,max(gday) as gday
FROM goodsrecord
WHERE goosid='A' group by gyear,gmonth ) b
ON a.gyear = b.gyear
AND a.gmonth = b.gmonth
AND a.gday = b.gday
GO不过象这种将年月日分开三个字段来储存的设计还真是少见。呵呵
楼上的两位让我很郁闷 程序员主要就是动手能力和阅读能力 如果觉得多就不看的话那会错过很多财富的 因为我们的朋友永远不会缺了帮助的