可查询历史变更单价表设计?
不同用户设定不同单价,我是这样设计的:
单价表(单号,建立日期,客户)
单价明细表(单号,品名,单价,生效日,失效日)
我的设想是每次修改或新增单价就在单价表建立新的表单,
这样单价表里就有单价变更历史记录了,
问题:
订单录入时要根据客户搜索该客户的当前单价,但单价表里同一客户同一产品的单价记录可能好几条,如何查询出当前单价呢?看别的软件单价表是这样设计的,有生效日和失效日,就是不知怎么用,不知大家类似单价表是如何设计的?
[解决办法]
单价表(单号,建立日期,客户,生效日,失效日)
单价明细表(单号,品名,单价)
这样会不会好点,查询当前单价 就找getdate between 生效日 and 失效日。
[解决办法]
if OBJECT_ID('单价表') is not null
drop table 单价表
go
create table 单价表
(
单号 varchar(10),
建立日期 datetime,
客户 varchar(10)
)
go
insert 单价表
select '10001','2012-10-06 18:24:32','U001' union all
select '10002','2012-10-14 09:32:53','U001'
go
if OBJECT_ID('单价明细表')is not null
drop table 单价明细表
go
create table 单价明细表
(
单号 varchar(10),
品名 varchar(10),
单价 numeric(8,2),
生效日 datetime,
失效日 datetime
)
go
insert 单价明细表
select '10001','test01',18.50,'2012-09-30','2012-10-07' union all
select '10001','test02',19.50,'2012-10-30','2012-11-07' union all
select '10002','test01',25.50,'2012-11-08','2012-11-30' union all
select '10002','test02',18.50,'2012-12-01','2012-12-05' union all
select '10001','test01',24.50,'2012-12-06','2012-12-31'
go
select
a.*,
b.单价,
b.生效日,
b.失效日
from
单价表 a
inner join
单价明细表 b
on
a.单号=b.单号
where
a.建立日期 between b.生效日 and b.失效日
/*
单号建立日期客户单价生效日失效日
100012012-10-06 18:24:32.000U00118.502012-09-30 00:00:00.0002012-10-07 00:00:00.000
*/
我觉得没什么问题
[解决办法]
为什么不弄个触发器呢,把每次修改新增的数据时把数据插入到另一个表,这样可以确保主表都是唯一性。而且查看历史记录也很方便啊。
[解决办法]
CREATE TABLE test (id INT ,begindate DATE,enddate date)
INSERT INTO test
SELECT 1,'2012-11-21','2012-11-22'
UNION ALL
SELECT 1,'2012-11-23','2012-12-22'
UNION ALL
SELECT 1,'2012-12-23','2999-12-31'
UNION ALL
SELECT 2,'2012-11-21','2999-12-31'
SELECT * FROM test
/*
id begindate enddate
----------- ---------- ----------
1 2012-11-21 2012-11-22
1 2012-11-23 2012-12-22
1 2012-12-23 2999-12-31
2 2012-11-21 2999-12-31
*/
DECLARE @date DATETIME
SET @date='2012-11-30'
SELECT * FROM test WHERE @date BETWEEN begindate AND enddate
/*
id begindate enddate
----------- ---------- ----------
1 2012-11-23 2012-12-22
2 2012-11-21 2999-12-31
*/
其实我的意思是想你的表设计成这样,不知道你看懂没