日期:2014-05-18 浏览次数:20563 次
--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