SQL Server:将排名添加到嵌套选择

SQL Server:将排名添加到嵌套选择,sql,sql-server,nested,ranking,rank,Sql,Sql Server,Nested,Ranking,Rank,我正在使用下面的存储过程,到目前为止,它运行良好 有人能告诉我,为了得到每个嵌套选择的排名,我必须如何改变这个? 我要找的是一个新的等级,它被添加到每个等级中,这样每个嵌套的选择都以1、2、3等开始 我的SP: SELECT * FROM ( SELECT ( SELECT policy, COUNT(*) AS count0

我正在使用下面的存储过程,到目前为止,它运行良好

有人能告诉我,为了得到每个嵌套选择的排名,我必须如何改变这个? 我要找的是一个新的等级,它被添加到每个等级中,这样每个嵌套的选择都以1、2、3等开始

我的SP:

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
结束


非常感谢你在这方面的帮助,蒂姆

将此列添加到每个嵌套选择中:

rank() over(order by count(*) desc, policy) [Rank]

不太确定你想要实现什么。你能举例说明一些数据输出吗?是否有已知数量的select语句?或者你们想让它独立于有多少(即递归)谢谢。目前总有6个嵌套选择。谢谢。我该把它放在哪里?只需将其添加到每个选择的xml行上方即可?如果您希望使其“每个嵌套选择从1、2、3等开始”,我会将其放在每个子查询的策略行之前。关于这一点,还有一个问题:如何按这个新的[Rank]对整个xml字符串进行排序?非常欢迎!很乐意帮忙。:)它应该已经按列组排序,因为列组是按count(*)desc、policy排序的,这就是子查询的排序依据。您可以将每个子查询中的order by子句替换为
order by[Rank]
,它应该具有相同的效果。是的,这不起作用,因为将结果转换为XML后,没有Rank列名称。每个子查询内的排序不起作用?