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

SQL有关问题 ,要连接两个无直接关联表

2012-03-26 
SQL问题 ,要连接两个无直接关联表有一种产品 每天分时段价格不同 分为一时段(6:00-9:00)、 二时段 (18:00-2

SQL问题 ,要连接两个无直接关联表
有一种产品 每天分时段价格不同 分为 一时段(6:00-9:00)、 二时段 (18:00-20:00) 和三时段(其他时段)三个时段
在这三个时段的价格不同

表结构


产品表
 产品名 产品数量 生产时间
  1 10 2010/12/31 23:00
  1 11 2011/1/1 0:00
  

产品价格
 产品名 价格制定时间 产品一时段价格 产品二时段价格 产品三时段价格
  1 2010/12/1 1 2 3
  1 2011/1/1 2 3 3


所需结果
产品名 生产时间 产品利润
  1 2010/12/31 23:00 30
  1 2011/1/1 0:00 33




[解决办法]

探讨

引用:

SQL code
select
a.产品名,a.生产时间,
SUM(case when convert(varchar(4),生产时间,108) between '06:00' and '09:00' then 产品数量*b.产品一时段价格
when convert(varchar(4),生产时间,108) between '18:00……

[解决办法]
探讨
引用:

SQL code
select
a.产品名,a.生产时间,
SUM(case when convert(varchar(4),生产时间,108) between '06:00' and '09:00' then 产品数量*b.产品一时段价格
when convert(varchar(4),生产时间,108) between '18:00'……

[解决办法]
SQL code
加上條件AND  b.[价格制定时间]=(SELECT MIN([价格制定时间]) FROM #产品价格 WHERE [产品名]=a.[产品名] AND [价格制定时间]>=a.[生产时间])use Tempdbgo--> -->  if not object_id(N'Tempdb..#产品表') is null    drop table #产品表GoCreate table #产品表([产品名] int,[产品数量] int,[生产时间] DATETIME)Insert #产品表select 1,10,N'2010/12/31 23:00' union allselect 1,11,N'2011/1/1 00:00'Goif not object_id(N'Tempdb..#产品价格') is null    drop table #产品价格GoCreate table #产品价格([产品名] int,[价格制定时间] Datetime,[产品一时段价格] int,[产品二时段价格] int,[产品三时段价格] int)Insert #产品价格select 1,'2010/12/1',1,2,3 union allselect 1,'2011/1/1',2,3,3GoSelect  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    301    2011-01-01 00:00:00.000    33*/
[解决办法]
如果价格制定时间有两个都小于生产时间呢

热点排行