Мне нужно найти общее количество заказов, размещенных клиентом, а также найти лучший продукт в одном запросе. Например, в следующей структуре,SQL Server - получить общее количество с TOP 1 продуктом
CREATE TABLE #Cust (CustId INT, CustName VARCHAR(50))
CREATE TABLE #Product (ProductId INT, ProductName VARCHAR(10))
CREATE TABLE #Orders (CustId INT, ProductId INT, OrderTaken BIT)
INSERT #Cust
(CustId, CustName)
VALUES (1, 'Paul'),
(2, 'F'),
(3, 'Francis')
INSERT #Product
(ProductId, ProductName)
VALUES (1, 'Table'),
(2, 'Chair')
INSERT #Orders
(CustId, ProductId, OrderTaken)
VALUES (1, 1, 1),
(1, 1, 1),
(1, 2, 1),
(2, 1, 1)
я пришел с запросом,
SELECT * FROM #Cust AS C OUTER APPLY
(
SELECT TOP 1 SQ.ProductId, SUM(SQ.TotalCount) AS TotalQty FROM
(
SELECT O.ProductId, COUNT(*) TotalCount
FROM #Orders AS O WHERE O.CustId = C.CustId
GROUP BY O.CustId , O.ProductId
) SQ
GROUP BY SQ.ProductId
) X
Но, что не дает мне результат, я ищу, для Павла это дает мне правильный ProductId, но только счет этого продукта.
Я хочу запрос, чтобы вернуться,
CustId | CustName | ProductId | TotalQty
--------+---------------+---------------+------------
1 | Paul | 1 | 3
2 | F | 1 | 1
3 | Francis | NULL | NULL