使用多个别名列时将数据类型 varchar 转换为数字时出错

Error converting data type varchar to numeric when using several alias columns

我有一个 table,其中包含 5 个已定义的列(id、colA、colB、colC、colD),除了 id.

外,所有列的数据类型均为 decimal(18, 3)
SELECT 
    [id],
    [colA], [colB], [colC], [colD],
    colA - colB as length,
    colC - colD * 2 as width,
    colA + width - length as colMod0
FROM 
    [dbo].[main]
ORDER BY
    _main.id;

当我执行这段代码时,出现错误

Error converting data type varchar to numeric

我试过投射和转换但没有成功。 Length, width 和 colMod0 都是别名列。

错误消息与类型无关。相反,它只是告诉您不能在同一级别的 select 语句中重复使用别名。一种解决方案是重复 widthlength:

的表达式
SELECT [id], [colA], [colB], [colC], [colD],
    colA-colB AS length,
    colC-colD*2 AS width,
    colA + (colC-colD*2) - (colA-colB) AS colMod0
FROM [dbo].[main]
ORDER BY _main.id;

另一种方法是将您当前的查询放入 CTE,然后对其进行子查询以使用别名:

WITH cte AS (
    SELECT [id], [colA], [colB], [colC], [colD],
        colA-colB AS length,
        colC-colD*2 AS width
    FROM [dbo].[main]
)

SELECT [id], [colA], [colB], [colC], [colD], length, width,
    colA + width - length as colMod0
FROM cte
ORDER BY _main.id;