### 利用超市管理数据库的商品表,编程实现:如果商品表中啤酒类平均售价低于10,则将所有啤酒的售价增加10%,直到平均售价达到10为止

1
2
3
4
5
6
7
use supermarket
WHILE (SELECT AVG(SalePrice) FROM Goods) < 10
BEGIN 
	UPDATE Goods SET SalePrice = SalePrice*1.1
	IF (SELECT AVG(SalePrice) FROM Goods) >= 10
	BREAK
END

创建一个函数fun_avgallgoodsale,求超市管理数据库中所有商品的平均售价

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
CREATE FUNCTION fun_avgallgoodsale()
RETURNS decimal(18,2)
AS 
	BEGIN
		DECLARE @name varchar(100),@avg_price decimal(18,2)
		SELECT @name = (SELECT GoodsName) FROM Goods
		SELECT @avg_price = (SELECT AVG(SalePrice)) FROM Goods
		RETURN @name
		RETURN @avg_price
	END

创建一个多语句表值函数fun_avggoodsale,求超市管理数据库各类商品的平均售价

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
USE supermarket
GO
CREATE FUNCTION fun_avggoodsale() 
RETURNS @avg_salePrice TABLE
	(
		good_category varchar(100),
		good_saleprice decimal(18,2)
	)
AS 
BEGIN
	INSERT INTO @avg_salePrice
	SELECT CategoryNO,AVG(SalePrice)
	FROM Goods
	GROUP BY CategoryNO
	RETURN
END

创建一个存储过程proc_avgnumsale,显示指定商品类别的平均数量和平均售价

1
2
3
4
5
6
7
8
9
USE supermarket
GO
CREATE PROCEDURE proc_avgnumsale;1
	@category varchar(100)
AS
SELECT AVG(Number) 平均数量,AVG(SalePrice)
FROM Goods G JOIN Category CA ON G.CategoryNO = CA.CategoryNO
WHERE CategoryName = @category
GO

通过游标cur遍历商品表的数据,并将每个商品的售价增加10%

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
use supermarket
DECLARE cur CURSOR 
FOR SELECT SalePrice FROM Goods FOR UPDATE
DECLARE @saleprice decimal(18,2)
OPEN cur
FETCH NEXT FROM cur INTO @saleprice
WHILE @@fetch_status = 0
	BEGIN
		UPDATE Goods SET SalePrice = SalePrice * 1.1 WHERE CURRENT OF cur;
	END
CLOSE cur
DEALLOCATE cur