SQL Server:将排名添加到嵌套选择
我正在使用下面的存储过程,到目前为止,它运行良好 有人能告诉我,为了得到每个嵌套选择的排名,我必须如何改变这个? 我要找的是一个新的等级,它被添加到每个等级中,这样每个嵌套的选择都以1、2、3等开始 我的SP: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
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列名称。每个子查询内的排序不起作用?