加工最近单价求函数 环境:SQL2000
来源: 视图view_wwjgjgdj
加工单位, 日期, 产品, 加工工序, 加工单价
traderid, billdate, materialid, vipbmclid, price
10001 ,2013-03-01 , 3001 , 1 , 2.3 ----前面4个字段重复
10001 ,2013-03-01 , 3001 , 1 , 2.7 ----前面4个字段重复
10001 ,2013-03-08 , 3001 , 2 , 3
10001 ,2013-06-05 , 3001 , 1 , 4 10001 ,2013-06-07 , 3001 , 1 , 3.3 ---完全重复
10001 ,2013-06-07 , 3001 , 1 , 3.3 ---完全重复 求函数function
vip_wwjgdjby(@traderid int ,@billdate datetime ,@materialid int ,@vipbmclid int )
注意:有可能视图view_wwjgjgdj 有得重复的行.
首先查询traderid,再查询materialid,vipbmclid ,再查询billdate, 后再取price的最大值查询1 函数
select * from
vip_wwjgdjby('10001' ,'2013-03-01' ,'3001','1')
traderid, billdate, materialid, vipbmclid, price
10001 ,2013-03-01 , 3001 , 1 , 2.7查询2
select * from
vip_wwjgdjby('10001' ,'2013-06-06' ,'3001','1')
traderid, billdate, materialid, vipbmclid, price
10001 ,2013-06-05 , 3001 , 1 , 4查询3
select * from
vip_wwjgdjby('10001' ,'2013-06-06' ,'3001','2')
traderid, billdate, materialid, vipbmclid, price
10001 ,2013-03-08 , 3001 , 2 , 3查询4
select * from
vip_wwjgdjby('10001' ,'2013-06-07' ,'3001','1')
traderid, billdate, materialid, vipbmclid, price
10001 ,2013-03-08 , 3001 , 1 , 3.3
来源: 视图view_wwjgjgdj
加工单位, 日期, 产品, 加工工序, 加工单价
traderid, billdate, materialid, vipbmclid, price
10001 ,2013-03-01 , 3001 , 1 , 2.3 ----前面4个字段重复
10001 ,2013-03-01 , 3001 , 1 , 2.7 ----前面4个字段重复
10001 ,2013-03-08 , 3001 , 2 , 3
10001 ,2013-06-05 , 3001 , 1 , 4 10001 ,2013-06-07 , 3001 , 1 , 3.3 ---完全重复
10001 ,2013-06-07 , 3001 , 1 , 3.3 ---完全重复 求函数function
vip_wwjgdjby(@traderid int ,@billdate datetime ,@materialid int ,@vipbmclid int )
注意:有可能视图view_wwjgjgdj 有得重复的行.
首先查询traderid,再查询materialid,vipbmclid ,再查询billdate, 后再取price的最大值查询1 函数
select * from
vip_wwjgdjby('10001' ,'2013-03-01' ,'3001','1')
traderid, billdate, materialid, vipbmclid, price
10001 ,2013-03-01 , 3001 , 1 , 2.7查询2
select * from
vip_wwjgdjby('10001' ,'2013-06-06' ,'3001','1')
traderid, billdate, materialid, vipbmclid, price
10001 ,2013-06-05 , 3001 , 1 , 4查询3
select * from
vip_wwjgdjby('10001' ,'2013-06-06' ,'3001','2')
traderid, billdate, materialid, vipbmclid, price
10001 ,2013-03-08 , 3001 , 2 , 3查询4
select * from
vip_wwjgdjby('10001' ,'2013-06-07' ,'3001','1')
traderid, billdate, materialid, vipbmclid, price
10001 ,2013-03-08 , 3001 , 1 , 3.3
CREATE TABLE view_wwjgjgdj(
traderid INT,
billdate DATETIME,
materialid INT,
vipbmclid INT,
price DECIMAL(9, 2)
)
GOINSERT INTO view_wwjgjgdj
SELECT 10001, '2013-03-01', 3001, 1, 2.3
UNION ALL SELECT 10001, '2013-03-01', 3001, 1, 2.7
UNION ALL SELECT 10001, '2013-03-08', 3001, 2, 3
UNION ALL SELECT 10001, '2013-06-05', 3001, 1, 4
UNION ALL SELECT 10001, '2013-06-07', 3001, 1, 3.3
UNION ALL SELECT 10001, '2013-06-07', 3001, 1, 3.3
GO--DROP FUNCTION vip_wwjgdjby
CREATE FUNCTION vip_wwjgdjby(@traderid int ,@billdate datetime ,@materialid int ,@vipbmclid int )
RETURNS @TBL TABLE(traderid INT, billdate DATETIME, materialid INT, vipbmclid INT, price DECIMAL(9, 2))
AS
BEGIN
--DECLARE @TBL TABLE(traderid INT, billdate DATETIME, materialid INT, vipbmclid INT, price DECIMAL(9, 2))
INSERT INTO @TBL
SELECT TOP 1 traderid, billdate, materialid, vipbmclid, price
FROM view_wwjgjgdj WHERE traderid=@traderid AND billdate<=@billdate AND materialid=@materialid AND vipbmclid=@vipbmclid
ORDER BY billdate DESC, price DESC
RETURN --@TBL
END--查询1 函数
select * from vip_wwjgdjby('10001' ,'2013-03-01' ,'3001','1')
/*
traderid billdate materialid vipbmclid price
----------- ----------------------- ----------- ----------- ---------------------------------------
10001 2013-03-01 00:00:00.000 3001 1 2.70(1 行受影响)*/
--查询2
select * from vip_wwjgdjby('10001' ,'2013-06-06' ,'3001','1')
/*
traderid billdate materialid vipbmclid price
----------- ----------------------- ----------- ----------- ---------------------------------------
10001 2013-06-05 00:00:00.000 3001 1 4.00(1 行受影响)
*/--查询3
select * from vip_wwjgdjby('10001' ,'2013-06-06' ,'3001','2')
/*
traderid billdate materialid vipbmclid price
----------- ----------------------- ----------- ----------- ---------------------------------------
10001 2013-03-08 00:00:00.000 3001 2 3.00
*/查询4
select * from vip_wwjgdjby('10001' ,'2013-06-07' ,'3001','1')
/*
traderid billdate materialid vipbmclid price
----------- ----------------------- ----------- ----------- ---------------------------------------
10001 2013-06-07 00:00:00.000 3001 1 3.30(1 行受影响)
*/