SQL Server: добавление рейтинга к вложенным выборкам

Я использую следующую хранимую процедуру, которая пока работает нормально.

Может кто-нибудь сказать мне, как я должен изменить это, чтобы получить рейтинг для каждого из вложенных выборок? То, что я ищу, - это новый ранг, который добавляется к каждому из них, так что каждый вложенный выбор начинается с 1, 2, 3 и т. Д.

Мой ИП:

SELECT  *
FROM    (
            SELECT 
            (
                SELECT      policy, 
                            COUNT(*) AS count0
                FROM        Log_PE 
                WHERE       CONVERT(DATE, dateEsc, 120) >= CONVERT(DATE, CONVERT(VARCHAR(6), DATEADD(month, -1, GETDATE()), 112) + '01', 112)
                GROUP BY    policy
                ORDER BY    count0 desc, policy
                FOR XML PATH('currentMonth'), ELEMENTS, TYPE
            )
            UNION ALL
            SELECT
            (
                SELECT      policy, 
                            COUNT(*) AS count1
                FROM        Log_PE 
                WHERE       CONVERT(DATE, dateEsc, 120) >= CONVERT(DATE, CONVERT(VARCHAR(6), DATEADD(month, -1, GETDATE()), 112) + '01', 112)
                GROUP BY    policy
                ORDER BY    count1 desc, policy
                FOR XML PATH('prevMonth2'), ELEMENTS, TYPE
            )
            UNION ALL
            SELECT
            (
                SELECT      policy, 
                            COUNT(*) AS count2
                FROM        Log_PE 
                WHERE       CONVERT(DATE, dateEsc, 120) >= CONVERT(DATE, CONVERT(VARCHAR(6), DATEADD(month, -2, GETDATE()), 112) + '01', 112)
                GROUP BY    policy
                ORDER BY    count2 desc, policy
                FOR XML PATH('prevMonth3'), ELEMENTS, TYPE
            )
            UNION ALL
            SELECT
            (
                SELECT      policy, 
                            COUNT(*) AS count3
                FROM        Log_PE 
                WHERE       CONVERT(DATE, dateEsc, 120) >= CONVERT(DATE, CONVERT(VARCHAR(6), DATEADD(month, -3, GETDATE()), 112) + '01', 112)
                GROUP BY    policy
                ORDER BY    count3 desc, policy
                FOR XML PATH('prevMonth4'), ELEMENTS, TYPE
            )
            UNION ALL
            SELECT
            (
                SELECT      policy, 
                            COUNT(*) AS count4
                FROM        Log_PE 
                WHERE       CONVERT(DATE, dateEsc, 120) >= CONVERT(DATE, CONVERT(VARCHAR(6), DATEADD(month, -4, GETDATE()), 112) + '01', 112)
                GROUP BY    policy
                ORDER BY    count4 desc, policy
                FOR XML PATH('prevMonth5'), ELEMENTS, TYPE
            )
            UNION ALL
            SELECT
            (
                SELECT      policy, 
                            COUNT(*) AS count5
                FROM        log_PE 
                WHERE       CONVERT(DATE, dateEsc, 120) >= CONVERT(DATE, CONVERT(VARCHAR(6), DATEADD(month, -5, GETDATE()), 112) + '01', 112)
                GROUP BY    policy
                ORDER BY    count5 desc, policy
                FOR XML PATH('prevMonth5'), ELEMENTS, TYPE
            )
        ) AS Data(XmlData)
    FOR XML PATH(''), ELEMENTS, TYPE

КОНЕЦ

Большое спасибо за любую помощь в этом, Тим.

1 ответ

Решение

Добавьте этот столбец к каждому из ваших вложенных элементов выбора:

rank() over(order by count(*) desc, policy) [Rank]
Другие вопросы по тегам