Ошибка преобразования типа данных varchar в число c при использовании нескольких столбцов псевдонимов - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть таблица с 5 определенными столбцами (id, colA, colB, col C, colD), все имеют тип данных decimal(18, 3), за исключением id.

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;

Когда я выполняю В этом коде я получаю сообщение об ошибке

Ошибка преобразования типа данных varchar в число c

Я пытался преобразовать и преобразовать данные, но безуспешно. Длина, ширина и colMod0 - все столбцы псевдонимов.

1 Ответ

2 голосов
/ 08 февраля 2020

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