表A 日期 物料编码 入库数量 表B 物料编码 生效日期 失效日期 价格 2010-5-12 00 100 00 2010-5-1 2010-5-15 2 2010-5-16 00 400 00 2010-5-16 2010-5-31 2.5
2010-06-01 00 300 00 2010-6-1 2010-6-31 3
跟据表B的日期的生效价格,生成视图
日期 物料编码 入库数量 价格
2010-5-12 00 100 2
2010-5-16 00 400 2.5 2010-06-01 00 300 3
2010-06-01 00 300 00 2010-6-1 2010-6-31 3
跟据表B的日期的生效价格,生成视图
日期 物料编码 入库数量 价格
2010-5-12 00 100 2
2010-5-16 00 400 2.5 2010-06-01 00 300 3
解决方案 »
- 关于修改一个字段里的内容?
- 这条SQL 语句怪怪的!!!
- 37350792(嵇幼雄-不算高手) [msn名:simba],这些是补给你的400分(1/4)
- 如何将数据表中的NVARCHAR字段已UNICODE编码方式读出?
- 如何建下图的表(多重嵌套),以及如何查询
- 请问带有order by 字句的SQL查询是对整个表先排序后扫描然后取结果集,还是先扫描取得结果集,然后对结果集排序?
- 请问,关于数据类行
- SQL查询 Group by 如何加上另一列的字段(不是分组的字段,也不是聚集函数)
- 关于存储过程加密的恢复!!!!!!11
- 数据库实训
- 这个SQL语句怎么写?
- 对于初学数据库者,Sqlserver,MySql,MSSql,哪个更合适?
as
select 日期, 物料编码 ,入库数量 ,价格 from
表A
2010-5-12 00 100
2010-5-16 00 400
2010-06-01 00 300
表B 物料编码 生效日期 失效日期 价格
00 2010-5-1 2010-5-15 2
00 2010-5-16 2010-5-31 2.5
00 2010-6-1 2010-6-31 3跟据表B的日期的生效价格,生成视图
日期 物料编码 入库数量 价格
2010-5-12 00 100 2
2010-5-16 00 400 2.5
2010-06-01 00 300 3
IF OBJECT_ID('[A]') IS NOT NULL
DROP TABLE [A]
GO
CREATE TABLE [A] ([日期] [datetime],[物料编码] [nvarchar](10),[入库数量] [int])
INSERT INTO [A]
SELECT '2010-5-12','00','100' UNION ALL
SELECT '2010-5-16','00','400' UNION ALL
SELECT '2010-06-01','00','300'--> 生成测试数据表: [B]
IF OBJECT_ID('[B]') IS NOT NULL
DROP TABLE [B]
GO
CREATE TABLE [B] ([物料编码] [nvarchar](10),[生效日期] [datetime],[失效日期] [datetime],[价格] [numeric](2,1))
INSERT INTO [B]
SELECT '00','2010-5-1','2010-5-15','2' UNION ALL
SELECT '00','2010-5-16','2010-5-31','2.5' UNION ALL
SELECT '00','2010-6-1','2010-6-30','3'
GO
--SELECT * FROM [A]
--SELECT * FROM [B]-->SQL查询如下:CREATE VIEW vw_GetItemInfo
AS
SELECT a.*, b.价格
FROM A a
JOIN b b
ON a.日期 BETWEEN b.生效日期 AND b.失效日期
AND a.物料编码=b.物料编码
GOSELECT * FROM vw_GetItemInfo
/*
日期 物料编码 入库数量 价格
----------------------- ---------- ----------- ---------------------------------------
2010-05-12 00:00:00.000 00 100 2.0
2010-05-16 00:00:00.000 00 400 2.5
2010-06-01 00:00:00.000 00 300 3.0(3 行受影响)
*/
go
if OBJECT_ID('tb_a') is not null
drop table tb_a
go
create table tb_a (日期 date,物料编码 varchar(5),入库数量 int)
insert into tb_a
select '2010-5-12', '00', 100 union all
select '2010-5-16', '00', 400 union all
select '2010-06-01', '00', 300
if OBJECT_ID('tb_b') is not null
drop table tb_b
go
create table tb_b(物料编码 varchar(5),生效日期 date,失效日期 date,价格 numeric(5,1))
insert into tb_b
select '00', '2010-5-1', '2010-5-15', 2 union all
select '00', '2010-5-16', '2010-5-31', 2.5 union all
select '00', '2010-6-1', '2010-6-30', 3create view v_test
as
select a.日期,a.物料编码,a.入库数量,b.价格
from tb_a a left join tb_b b on a.物料编码=b.物料编码 and a.日期 between b.生效日期 and b.失效日期
CREATE VIEW vw_GetItemInfo
AS
SELECT a.*, b.价格
FROM A a,b b
where a.日期 BETWEEN b.生效日期 AND b.失效日期
AND a.物料编码=b.物料编码
GO