Пользовательская функция с подзапросом - PullRequest
0 голосов
/ 21 июня 2019

Создайте пользовательскую функцию с именем XXRepeatCustomer (где XX - ваши инициалы). Функция должна иметь один входной параметр. Используйте тип данных INT для входного параметра. Когда функция выполняется, она возвращает таблицу из трех столбцов (CustFirstName, CustLastName и Phone) для клиентов, которые разместили количество заказов, большее или равное числу, переданному через входной параметр.

Чтобы получить общее количество размещенных заказов, я объединил таблицы Customer и CustOrder. Проблема только в том, чтобы я показывал первый, последний и телефон каждого клиента, но не общее количество заказов. Я пытаюсь присвоить параметр @orders и подсчитать общее количество заказов в подзапросе.

CREATE FUNCTION dbo.JERepeatCustomer
(@orders INT)
RETURNS TABLE AS
RETURN (SELECT CustFirstName, CustLastName, Phone 
FROM Customer C JOIN CustOrder CO
ON C.CustomerID = CO.CustomerID
WHERE @orders <= OrderID AND OrderID = (SELECT COUNT (DISTINCT OrderID) FROM CustOrder)
GROUP BY CustFirstName, CustLastName, Phone)

Я ожидаю, что пользователь введет 7 или любое число, а результаты покажут только клиенты, заказавшие 7 или более.

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Вам нужно ключевое слово HAVING. ЕСТЬ похожа на ГДЕ. WHERE будет фильтровать возвращаемые строки на основе определенного значения в этом столбце, а HAVING будет фильтровать строки на основе агрегированного значения в столбце.

Например, у вас есть таблица клиентов, а в таблице заказов есть все заказы для каждого клиента.

DECLARE @input INT = 7
SELECT ct.customer, ct.phone, COUNT(ot.orderID)
FROM customertable ct
INNER JOIN ordertable ot
ON ct.customerID = ot.customerID 

GROUP BY ct.customer, ct.phone
HAVING COUNT(ot.OrderID) >= @input  
0 голосов
/ 21 июня 2019
SELECT CustFirstName, CustLastName, Phone 
FROM Customer C 
     CORSS APPLY (
             SELECT COUNT(*) AS Orders
             FROM CustOrder CO
             WHERE  C.CustomerID = CO.CustomerID) CustomerOrders
Where CustomerOrders.Orders >= @orders 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...