Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Vladislav-Melenchuk/e8d0d999bd7535831701fc898f23fb4b to your computer and use it in GitHub Desktop.
Save Vladislav-Melenchuk/e8d0d999bd7535831701fc898f23fb4b to your computer and use it in GitHub Desktop.
HW_9
1. Написать хранимую процедуру, которая показывает общее количество проданных товаров в каждой из категорий и от каждого производителя.
CREATE PROCEDURE task1_1
AS
BEGIN
SELECT c.name , pr.name , SUM(s.quantity)
FROM Sale s
JOIN Product p ON s.id_product = p.id
JOIN Category c ON p.id_category = c.id
JOIN Producer pr ON p.id_producer = pr.id
GROUP BY c.name, pr.name
END
3. Написать хранимую процедуру, которая показывает список производителей и общее количество товаров, произведённых каждым из них.
CREATE PROCEDURE Task1_2
AS
BEGIN
SELECT pr.name AS Producer, COUNT(*) AS TotalProducts
FROM Product p
JOIN Producer pr ON p.id_producer = pr.id
GROUP BY pr.name
END
4. Создать хранимую процедуру, которая показывает название продукта, который был продан в максимальном количестве.
CREATE PROCEDURE task1_3
AS
BEGIN
SELECT TOP 1 p.name, SUM(s.quantity)
FROM Sale s
JOIN Product p ON s.id_product = p.id
GROUP BY p.name
END
-------
1. При продаже товара (добавлении записи в таблицу Sale), его количество должно уменьшаться (в таблице Product) .
CREATE TRIGGER task2_1
ON Sale
AFTER INSERT
AS
BEGIN
UPDATE p
SET p.quantity = p.quantity - i.quantity
FROM Product p
JOIN inserted i ON p.id = i.id_product
END
2. Нельзя продать товар, которого нет на складе магазина (по количеству).
CREATE TRIGGER netynasklade
ON Sale
INSTEAD OF INSERT
AS
BEGIN
IF EXISTS (
SELECT 1 FROM inserted i
JOIN Product p ON i.id_product = p.id
WHERE p.quantity < i.quantity
)
BEGIN
RAISERROR ('Недостаточно товара на складе!', 16, 1)
ROLLBACK
END
ELSE
BEGIN
INSERT INTO Sale (id_product, quantity, price, date_of_sale)
SELECT id_product, quantity, price, date_of_sale FROM inserted
END
END
3. Нельзя продать больше 100 единиц одного товара одному покупателю.
CREATE TRIGGER task3
ON Sale
INSTEAD OF INSERT
AS
BEGIN
IF EXISTS (
SELECT 1 FROM inserted WHERE quantity > 100
)
BEGIN
RAISERROR ('Нельзя продать более 100 единиц одного товара!', 16, 1)
ROLLBACK
END
ELSE
BEGIN
INSERT INTO Sale (id_product, quantity, price, date_of_sale)
SELECT id_product, quantity, price, date_of_sale FROM inserted
END
END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment