Сообщение об ошибке не имеет ничего общего с типами. Скорее, это просто говорит вам, что псевдоним не может быть повторно использован в операторе выбора на том же уровне. Одно из решений состоит в том, чтобы просто повторить выражения для width
и length
:
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;