SQL Server 10.50 OVER PARTITION 无法识别
Posted
技术标签:
【中文标题】SQL Server 10.50 OVER PARTITION 无法识别【英文标题】:SQL Server 10.50 OVER PARTITION not recognized 【发布时间】:2019-09-24 23:32:25 【问题描述】:我正在尝试在 SQL Server 2008 R2 (v10.50.1600.1) 中使用 OVER PARTITION
,但编写和执行它表明 ORDER 附近出现错误,我尝试在 SQL Server 2014 中运行相同的查询而不进行修改( v12.0.4100.1),但它工作没有问题,并且在 SQL Server 文档中我没有设法找到任何东西,我知道还有其他方法可以模拟这个过程,但我想知道是否有更敏捷的等价。谢谢
SELECT
e.ID, e.[date],
COUNT(*) OVER (PARTITION BY e.ID ORDER BY e.[date] DESC) AS ind
FROM
events e
JOIN
Manager h ON h.ID = e.ID AND h.Active = 1 AND h.[Status] <> 30037
WHERE
e.Iary IN (1, 2, 3)
GROUP BY
e.ID, e.[date]
我收到此错误:
消息 156,第 15 级,状态 1,第 3 行 关键字“ORDER”附近的语法不正确
【问题讨论】:
这些窗口函数是在 SQL Server 2012 (v11.x) 中引入的,在 SQL Server 2008 R2 (v10.50) 中不可用 .顺便提一下:SQL Server 2008 和 2008 R2 现在不再提供扩展支持 - red-gate.com/simple-talk/sql/database-administration/… - 升级时间! El COUNT() es para llevar una cuenta prograsiva de ese grupo, pero ya lo solucione, en 10.50 no es compatible usar el ORDER BY con un COUNT(), cosa que si funciona y cumple el objetivo en 12.0, cambiando el COUNT(*) por ROW_NUMBER() 【参考方案1】:删除ORDER BY e.[date] DESC
SELECT e.ID, e.[date], COUNT(*) OVER(PARTITION BY e.ID) AS ind
FROM events e
JOIN Manager h ON h.ID = e.ID AND h.Active = 1 AND h.[Status] <> 30037
WHERE e.Iary IN (1,2,3)
GROUP BY e.ID, e.[date]
【讨论】:
【参考方案2】:您的查询应如下所示。您只想根据e.ID
获得count()
SELECT e.ID, e.[date], COUNT(*) AS ind
FROM events e
JOIN Manager h ON h.ID = e.ID AND h.Active = 1 AND h.[Status] <> 30037
WHERE e.Iary IN (1,2,3)
GROUP BY e.ID, e.[date]
ORDER BY e.[date]
【讨论】:
【参考方案3】:COUNT() 是保留该组的一个程序帐户,但已经解决了,在 10.50 中使用带有 COUNT() 的 ORDER BY 是不兼容的,如果它工作并满足 12.0 中的目标,将 COUNT (* ) 更改为 ROW_NUMBER ()
SELECT
e.ID, e.[date],
ROW_NUMBER() OVER (PARTITION BY e.ID ORDER BY e.[date] DESC) AS ind
FROM
events e
JOIN
Manager h ON h.ID = e.ID AND h.Active = 1 AND h.[Status] <> 30037
WHERE
e.Iary IN (1, 2, 3)
GROUP BY
e.ID, e.[date]
【讨论】:
SO 是一个只有英文的网站。 对不起,英语不是我的母语,回复时复制未翻译的文本以上是关于SQL Server 10.50 OVER PARTITION 无法识别的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server count() over() with distinct
sql server 中 使用lead() over()函数报错:lead无法识别的内置函数。