Когда я делаю этот запрос невложенным (включая -), я получаю то, что ищу. Однако мне нужен только номер строки (rn) <= 10. Затем, когда я вставляю его, я получаю сообщение об ошибке, касающееся моих ORDER BY и HAVING. </p>
--SELECT *
--FROM(
SELECT InvoiceNo, DescriptionofService, SUM(Price) AS Total_Price,year(invoicedate) AS 'Year', COUNT(DescriptionofService) AS cnt
,ROW_NUMBER() OVER (PARTITION BY InvoiceNo ORDER BY COUNT(DescriptionofService) DESC, SUM(Price) DESC) AS rn
FROM Billing_Lab_Invoice
WHERE year(Invoicedate) = 2020
GROUP BY InvoiceNo, DescriptionofService, year(invoicedate)
ORDER BY InvoiceNo, cnt DESC, Total_Price DESC
-- )
-- HAVING rn <= 10
Вот мои показания, прежде чем я попытаюсь отфильтровать столбец с номером строки
64941452 A 87.50 2020 25 1
64941452 B 62.50 2020 25 2
64941452 C 81.00 2020 18 3
64941452 D 44.00 2020 11 4
......
64941452 E 22.50 2020 3 14
EDIT Это сработало, но не знаю, почему
SET DATEFORMAT DMY
;WITH CTE AS (
SELECT InvoiceNo
, DescriptionofService
, SUM(Price) AS Total_Price
,year(invoicedate) AS 'Year'
, COUNT(DescriptionofService) AS cnt
,ROW_NUMBER() OVER
(
PARTITION BY InvoiceNo ORDER BY COUNT(DescriptionofService) DESC, SUM(Price) DESC) AS rn
FROM Billing_Lab_Invoice
WHERE year(Invoicedate) = 2020
GROUP BY InvoiceNo, DescriptionofService, year(invoicedate)
)
SELECT * FROM CTE WHERE [rn] <=10
64941452 A 87,50 2020 25 1 64941452 B 62,50 2020 25 2 64941452 C 81,00 2020 18 3 64941452 D 44,00 2020 11 4 64941452 D 50,00 2020 10 5 64941452 E 161.00 2020 7 6 64941452 F 22.50 2020 6 7 64941452 G 504.352020 5 8 64941452 H 40.00 2020 5 9 64941452 I 40.00 2020 5 10 64946394 A 351.00 2020 78 1 64946394 B 199.50 2020 57 2