в таблице Orders данные хранятся в иерархическом порядке, parent_id содержит row_id предка. Всего в иерархии три уровня.
Нужно написать две функции:
1) Написать функцию select_orders_by_item_name. Она получает один аргумент - наименование позиции (строка),
и должна найти все заказы, в которых имеется позиция с данным наименованием. Кроме того, она должна
подсчитать количество позиций с указанным наименованием в каждом отдельном заказе. Результатом вызова
функции должна быть таблица:
CREATE FUNCTION select_orders_by_item_name (@string nvarchar(max))
returns Table
AS
RETURN
(
select distinct Orders.row_id,Customers.name from orders,orderitems,Customers
where OrderItems.name=@string and OrderItems.order_id=Orders.row_id
and Customers.row_id=Orders.customer_id
);
Она заказы находит, но не считает их.
2) Написать функцию calculate_total_price_for_orders_group. Она получает row_id группы (либо заказа),
и возвращает суммарную стоимость всех позиций всех заказов в этой группе (заказе), причем
суммирование должно выполняться по всему поддереву заказов, начинающемуся с данной группы. Функция должна возвращать число.
CREATE FUNCTION calculate_total_price_for_orders_group(@f int)
RETURNS FLOAT
AS
BEGIN
DECLARE @s int
SET @s=(SELECT Sum(OrderItems.price)
FROM orderitems INNER JOIN orders
ON orders.row_id = OrderItems.order_id
GROUP BY Orders.row_id
HAVING Orders.row_id=@f)
RETURN (@s)
END
Она считает но не учитывает иерархическую структуру таблицы, то есть нормально считает только для тех строк, которые сами являются заказами, а не группами заказов. Я понял, что нужно сделать представление, которое будет содержать все вложенные заказы, в том случае если вводится индекс не заказа, а группы заказов.