日期:2014-05-18 浏览次数:20680 次
--1.修改货物表,调整总量超过350000的货物单价为原来的90% update 货物 set 单价=0.9*单价 where 货物总量>350000 2.找出运输过所有货物的司机 select b.司机编号, b.姓名 from 货车 a inner join 司机 b on a.司机=b.司机编号 where a.货车编号 in (select 货车编号 from 运输记录 group by 货车编号 having count(distinct 货物编号)=(select count(货物编号) from 货物编号))
------解决方案--------------------
游標
1.修改货物表,调整总量超过350000的货物单价为原来的90%
DECLARE cur CURSOR LOCAL FOR
SELECT 货物编号,货物总量 FROM 货物表
DECLARE @货物编号 NVARCHAR(50),@货物总量 INT
OPEN cur
FETCH NEXT FROM cur INTO @货物编号,@货物总量
WHILE @@FETCH_STATUS=0
BEGIN
IF @货物总量>350000
UPDATE 货物表 SET 单价=单价*0.9 WHERE 货物编号=@货物编号
FETCH NEXT FROM cur INTO @货物编号,@货物总量
END
CLOSE cur
DEALLOCATE cur
------解决方案--------------------
2.找出运输过所有货物的司机
DECLARE @T TABLE(司机编号 NVARCHAR(50),姓名 NVARCHAR(50))
DECLARE cur2 CURSOR LOCAL FOR
SELECT 司机编号,姓名 FROM 司机
DECLARE @司机编号 NVARCHAR(50),@姓名 NVARCHAR(50)
OPEN cur2
FETCH NEXT FROM cur2 INTO @司机编号,@姓名
WHILE @@FETCH_STATUS=0
BEGIN
IF NOT EXISTS(SELECT 1 FROM 货物 AS x WHERE NOT EXISTS(SELECT 1 FROM 货车表 AS a INNER JOIN 运输记录表 AS b ON a.货车编号=b.货车编号 AND a.出场日期=b.出场日期 WHERE b.货物编号=x.货物编号))
INSERT INTO @T
( 司机编号, 姓名 )
VALUES ( @司机编号, -- 司机编号 - nvarchar(50)
@姓名 -- 姓名 - nvarchar(50)
)
FETCH NEXT FROM cur2 INTO @司机编号,@姓名
END
CLOSE cur2
DEALLOCATE cur2
SELECT * FROM @T