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

大虾,帮忙啊,求一Sql语句(邹建大哥,麻烦你的了)
有一个价格表Pub_PriceChePart
字段(corpid   公司号
            supid   供应商号
            partid   零部件号
            partp   价格
            startdate     价格执行开始日期
            stopdate       价格执行结束日期

数据如下
corpid     supid   ,partid,partp   startdate     ,stopdate
105           001002     0012         0.12     2007.05.12       2007.05.20
105           001002     0012         0.15     2007.05.21       2007.05.25
105           001002     0012         0.20     2007.05.26       2007.06.10
105           001002     0012         0.30     2007.06.11       2007.06.20
105           001002     0012         0.35     2007.06.21       2007.06.25    

先有个问题是这样的:
需要统计出
每个供应商号下,每个零部件,在2007.05.25的执行价格,和时间段(2007.05.26-2007.06.25)之间该零部件的平均单价


需要的结果是
corpid   supid     partid     (05.25)的价格   (这个月的)平均单价
105         001002   0012         0.15,               (0.20+0.30+0.35)/3

麻烦帮忙下!


------解决方案--------------------
select corpid,supid,partid,
(select partp from PriceChePart where corpid=a.corpid and supid=a.supid and partid=a.partid and '2007-5-25 ' between startdate and stopdate) as [(05.25)的价格],
avg(partp) as [(这个月的)平均单价]
from Pub_PriceChePart a
where stopdate> = '2007-5-26 '
and startdate <= '2007-6-25 '
group by corpid,supid,partid

------解决方案--------------------
declare @date varchar(10)
select corpid,supid,partid,價格 = (select a.partp from Pub_PriceChePart a where a.corpid = corpid and a.supid = supid and a.partid = partid and a.startdate <= @date and a.stopdate> @date)
, 平均價格 = (select sum(partp)/count(1) from Pub_PriceChePart b where b.corpid = corpid and b.supid = supid and b.partid = partid and datediff(mm,b.stopdate,getdate()) = 0 ) from Pub_PriceChePart
------解决方案--------------------
declare @date varchar(10)
select corpid,supid,partid,價格 = (select a.partp from Pub_PriceChePart a where a.corpid = corpid and a.supid = supid and a.partid = partid and a.startdate <= @date and a.stopdate> @date)
, 平均價格 = (select avg(partp) from Pub_PriceChePart b where b.corpid = corpid and b.supid = supid and b.partid = partid and datediff(mm,b.stopdate,getdate()) = 0 ) from Pub_PriceChePart

------解决方案--------------------
這個可以直接用關聯寫


Select
A.corpid,
A.supid,
A.partid,
B.partp As 执行价格,
Cast(AVG(A.partp) As Numeric(5, 2)) As 平均单价
From
Pub_PriceChePart A
Inner Join
Pub_PriceChePart B
On
A.corpid = B.corpid And A.supid = B.supid And A.partid = B.partid
Where
A.startdate > = '2007-05-25 ' And A.stopdate <= '2007-06-25 '
And
'2007-05-25 ' Between B.startdate And B.stopda