MOL*_*LAP 1 sql sql-server row-number type-conversion
我正在使用ROW_NUMBER()SQL Server中的函数来创建一个名为的新列RowNumber.
但是当我稍后在同一个查询中引用WHERE语句中的这个新字段时,我得到了这个错误,即使该字段应该是一个整数:
将varchar值'RowNumber'转换为数据类型int时转换失败
这是我的查询:
SELECT
ROW_NUMBER() OVER(PARTITION BY c.Node_base ORDER BY sum(c.Score) DESC) AS "RowNumber",
c.Node_base, c.Node_forslag, sum(Score)
FROM
t_input as c
WHERE 'RowNumber' < 11
GROUP BY c.Node_base, c.Node_forslag
ORDER BY c.Node_base desc
Run Code Online (Sandbox Code Playgroud)
您不能从SELECT子句中的WHERE子句引用计算列- 即使可以,单引号也会引入字符串文字,而不是列引用.使用CTE或子查询.
;With Sums as (
SELECT c.Node_base, c.Node_forslag,SUM(c.Score) as TotScore
FROM t_input as c
GROUP BY c.Node_base, c.Node_forslag
), NumberedRows as (
SELECT *,ROW_NUMBER() OVER(PARTITION BY Node_base ORDER BY TotScore DESC) AS RowNumber
FROM Sums
)
select * from NumberedRows
WHERE RowNumber <11
order by Node_base desc
Run Code Online (Sandbox Code Playgroud)
根本不需要引用名称RowNumber- 它不是保留字,也不包含特殊字符.