日期:2014-05-18 浏览次数:20652 次
加上條件
AND b.[价格制定时间]=(SELECT MIN([价格制定时间]) FROM #产品价格 WHERE [产品名]=a.[产品名] AND [价格制定时间]>=a.[生产时间])
use Tempdb
go
--> -->
if not object_id(N'Tempdb..#产品表') is null
drop table #产品表
Go
Create table #产品表([产品名] int,[产品数量] int,[生产时间] DATETIME)
Insert #产品表
select 1,10,N'2010/12/31 23:00' union all
select 1,11,N'2011/1/1 00:00'
Go
if not object_id(N'Tempdb..#产品价格') is null
drop table #产品价格
Go
Create table #产品价格([产品名] int,[价格制定时间] Datetime,[产品一时段价格] int,[产品二时段价格] int,[产品三时段价格] int)
Insert #产品价格
select 1,'2010/12/1',1,2,3 union all
select 1,'2011/1/1',2,3,3
Go
Select
a.产品名,
a.生产时间,
sum(CASE WHEN DATEPART(hh,a.生产时间) BETWEEN 6 AND 9 THEN [产品数量]*[产品一时段价格]
WHEN DATEPART(hh,a.生产时间) BETWEEN 6 AND 9 THEN [产品数量]*[产品二时段价格]
ELSE [产品数量]*[产品三时段价格] END) AS 产品利润
from #产品表 AS a
INNER JOIN #产品价格 AS b ON a.[产品名]=b.[产品名] AND a.[生产时间]<=b.[价格制定时间] AND b.[价格制定时间]=(SELECT MIN([价格制定时间]) FROM #产品价格 WHERE [产品名]=a.[产品名] AND [价格制定时间]>=a.[生产时间])
GROUP BY
a.产品名,
a.生产时间
/*
产品名 生产时间 产品利润
1 2010-12-31 23:00:00.000 30
1 2011-01-01 00:00:00.000 33
*/
------解决方案--------------------
如果价格制定时间有两个都小于生产时间呢