Ala*_*laa 3 t-sql sql-server-2008
以下查询正常工作没有',MAX(行)'
WITH QResult AS
(SELECT
ROW_NUMBER() OVER (ORDER BY Ad_Date DESC) AS Row,
*
FROM [vw_ads]
)
SELECT *, MAX(Row)
FROM QResult
Run Code Online (Sandbox Code Playgroud)
当MAX(Row)
添加,SQL Server 2008中抛出以下错误:
列'QResult.Row'在选择列表中无效,因为它不包含在聚合函数或
GROUP BY
子句中.
当使用聚合函数一样SUM
,COUNT
或者MAX
,你也想从你的数据中选择其他列,那么你在查询中使用的另一列(S)需要将数据分组.
所以你需要写一些类似的东西:
WITH QResult AS
(SELECT
ROW_NUMBER() OVER (ORDER BY Ad_Date DESC) AS Row,
*
FROM [vw_ads]
)
SELECT Co1l, Col2, MAX(Row)
FROM QResult
GROUP BY Col1, Col2
Run Code Online (Sandbox Code Playgroud)
这也意味着您需要明确拼写出您想要的列 - 无论如何都是个好主意.你不能*
在一个GROUP BY
条款中使用.
更新:根据您的意见,我想你真正想要的是这样的:
(见更新#2 -马丁·史密斯的建议是比我原来的想法,甚至更好地在这里)
WITH QResult AS
(SELECT
ROW_NUMBER() OVER (ORDER BY Ad_Date DESC) AS Row,
*
FROM [vw_ads]
)
SELECT
Co1l, Col2,
MaxRow = (SELECT MAX(Row) FROM QResult)
FROM QResult
Run Code Online (Sandbox Code Playgroud)
这将为Row
结果集的每一行提供CTE 的最大值,即相同的值.
更新#2: Martin Smith的建议如下:
WITH QResult AS
(SELECT
ROW_NUMBER() OVER (ORDER BY Ad_Date DESC) AS Row,
*
FROM [vw_ads]
)
SELECT
Co1l, Col2,
MAX(Row) OVER()
FROM QResult
Run Code Online (Sandbox Code Playgroud)
当然,这也有效 - 甚至比我的解决方案更有效率.谢谢,马丁!
归档时间: |
|
查看次数: |
5015 次 |
最近记录: |