求写存储过程,自己搞不定

ykwang 2011-09-13 09:05:08
我有两个表 A表 B 表

A表
入库日期 产品型号 入库数量
2011-09-01 AT001 2
2011-09-05 AT001 5
2011-09-08 AT001 3
2011-09-06 AT002 3

B表
价格执行日期 产品型号 价格
2011-08-31 AT001 1
2011-09-02 AT001 2
2011-08-31 AT002 3
2011-09-05 AT002 4

要求产生结果如下:
入库日期 产品型号 入库数量 价格
2011-09-01 AT001 2 1
2011-09-05 AT001 5 2
2011-09-08 AT001 3 2
2011-09-06 AT002 3 4

就是根据入库日期判断,以获取这段日期之内的价格。由于各种原因,这数据不能在保存的时候获取,只能在查询的时候获取,请问有啥办法,谢谢
...全文
38 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lemon2050 2011-09-13
  • 打赏
  • 举报
回复
我的结果等同于在表A中多添一列 "价格",对你取数据非常方便哦
Lemon2050 2011-09-13
  • 打赏
  • 举报
回复

create PROCEDURE [dbo].[Test]
as
begin
SELECT 入库日期,产品型号,入库数量,
(
SELECT 价格
from B
WHERE 价格执行日期=
(
SELECT distinct MAX(价格执行日期)
FROM B
where 价格执行日期<=入库日期 and A.产品型号=B.产品型号)
and A.产品型号=B.产品型号
)
FROM A
end
ykwang 2011-09-13
  • 打赏
  • 举报
回复
太强了,应用无止境。
dawugui 2011-09-13
  • 打赏
  • 举报
回复

create table a(入库日期 datetime,产品型号 varchar(10),入库数量 int)
insert into a values('2011-09-01', 'AT001', 2)
insert into a values('2011-09-05', 'AT001', 5)
insert into a values('2011-09-08', 'AT001', 3)
insert into a values('2011-09-06', 'AT002', 3)
create table B(价格执行日期 datetime,产品型号 varchar(10),价格 int)
insert into b values('2011-08-31', 'AT001', 1)
insert into b values('2011-09-02', 'AT001', 2)
insert into b values('2011-08-31', 'AT002', 3)
insert into b values('2011-09-05', 'AT002', 4)
go

select a.* , 价格 = (select top 1 价格 from b where b.产品型号 = a.产品型号 and b.价格执行日期 < a.入库日期 order by b.价格执行日期 desc) from a

drop table a , b

/*
入库日期 产品型号 入库数量 价格
------------------------------------------------------ ---------- ----------- -----------
2011-09-01 00:00:00.000 AT001 2 1
2011-09-05 00:00:00.000 AT001 5 2
2011-09-08 00:00:00.000 AT001 3 2
2011-09-06 00:00:00.000 AT002 3 4

(所影响的行数为 4 行)
*/
dawugui 2011-09-13
  • 打赏
  • 举报
回复

create table a(入库日期 datetime,产品型号 varchar(10),入库数量 int)
insert into a values('2011-09-01', 'AT001', 2)
insert into a values('2011-09-05', 'AT001', 5)
insert into a values('2011-09-08', 'AT001', 3)
insert into a values('2011-09-06', 'AT002', 3)
create table B(价格执行日期 datetime,产品型号 varchar(10),价格 int)
insert into b values('2011-08-31', 'AT001', 1)
insert into b values('2011-09-02', 'AT001', 2)
insert into b values('2011-08-31', 'AT002', 3)
insert into b values('2011-09-05', 'AT002', 4)
go

select a.* , 价格 = (select top 1 价格 from b where b.产品型号 = a.产品型号 and b.价格执行日期 < a.入库日期 order by b.价格执行日期 desc) from a

drop table a , b

/*
入库日期 产品型号 入库数量 价格
------------------------------------------------------ ---------- ----------- -----------
2011-09-01 00:00:00.000 AT001 2 1
2011-09-05 00:00:00.000 AT001 5 2
2011-09-08 00:00:00.000 AT001 3 2
2011-09-06 00:00:00.000 AT002 3 4

(所影响的行数为 4 行)
*/

dawugui 2011-09-13
  • 打赏
  • 举报
回复
create table a(入库日期 datetime,产品型号 varchar(10),入库数量 int)
insert into a values('2011-09-01', 'AT001', 2)
insert into a values('2011-09-05', 'AT001', 5)
insert into a values('2011-09-08', 'AT001', 3)
insert into a values('2011-09-06', 'AT002', 3)
create table B(价格执行日期 datetime,产品型号 varchar(10),价格 int)
insert into b values('2011-08-31', 'AT001', 1)
insert into b values('2011-09-02', 'AT001', 2)
insert into b values('2011-08-31', 'AT002', 3)
insert into b values('2011-09-05', 'AT002', 4)
go

select a.* , 价格 = (select top 1 价格 from b where b.产品型号 = a.产品型号 and b.价格执行日期 < a.入库日期 order by b.价格执行日期 desc) from a

drop table a , b

/*
入库日期 产品型号 入库数量 价格
------------------------------------------------------ ---------- ----------- -----------
2011-09-01 00:00:00.000 AT001 2 1
2011-09-05 00:00:00.000 AT001 5 2
2011-09-08 00:00:00.000 AT001 3 2
2011-09-06 00:00:00.000 AT002 3 4

(所影响的行数为 4 行)
*/

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧