SQL Server, как добавить вычисляемые столбцы в переменную и использовать его в другом столбце - PullRequest
0 голосов
/ 15 мая 2019

Привет, у меня есть следующий запрос

GO
DECLARE @tempTable TABLE
(
    Id INT PRIMARY KEY,
    Referencia VARCHAR(15),
    UAP NVARCHAR(20),
    ConsumoWeek01 FLOAT,
    ConsumoWeek02 FLOAT,
    Stock INT,
    PecasPorCaixa INT
    UNIQUE (Id)
)

INSERT INTO
    @tempTable
SELECT *
FROM
    viewConsumoPDP

SELECT 
    C.Id,
    C.Referencia,
    C.UAP,
    C.ConsumoWeek01 AS ConsumoInicialWeek01,
    T.ConsumoWeek01 AS ConsumoActualWeek01,
    T.ConsumoWeek01 / 5 AS ConsumoDiarioWeek01,
    T.ConsumoWeek02 AS ConsumoWeek02
FROM 
    @tempTable T
INNER JOIN Parametros P
ON P.Referencia = T.Referencia 
AND P.UAP = T.UAP
INNER JOIN Consumos C
ON C.Referencia = P.Referencia
AND C.UAP = P.UAP

Мне нужно создать некоторые переменные, которые рассчитываются с использованием значений некоторых столбцов, и мне нужно использовать эту переменную для вычисления других столбцов.

Причина в том, что я не хочу делать все вычисления для оператора select, и это будет большой путаницей, но я понятия не имею, возможно ли это с помощью SQL Transact.

Например

GO
    DECLARE @tempTable TABLE
    (
        Id INT PRIMARY KEY,
        Referencia VARCHAR(15),
        UAP NVARCHAR(20),
        ConsumoWeek01 FLOAT,
        ConsumoWeek02 FLOAT,
        Stock INT,
        PecasPorCaixa INT
        UNIQUE (Id)
    )

    DECLARE @NumPAB INT

    INSERT INTO
        @tempTable
    SELECT *
    FROM
        viewConsumoPDP

    SELECT 
        C.Id,
        C.Referencia,
        C.UAP,
        C.ConsumoWeek01 AS ConsumoInicialWeek01,
        T.ConsumoWeek01 AS ConsumoActualWeek01,
        T.ConsumoWeek01 / 5 AS ConsumoDiarioWeek01,
        T.ConsumoWeek02 AS ConsumoWeek02,
        @ConsumoPAB = P.NumPab / T.ConsumoWeek01                 
    FROM 
        @tempTable T
    INNER JOIN Parametros P
    ON P.Referencia = T.Referencia 
    AND P.UAP = T.UAP
    INNER JOIN Consumos C
    ON C.Referencia = P.Referencia
    AND C.UAP = P.UAP

Вы можете видеть, что я хотел бы сохранить результат вычисления в переменной, а затем использовать его в другом вычисляемом столбце. Но как этого добиться, если я не могу присвоить значение в операторе выбора?

1 Ответ

2 голосов
/ 15 мая 2019

С помощью оператора SELECT вы можете вернуть результирующий набор ИЛИ присвоить значения переменным. Вы не можете выполнять обе операции одновременно.

Основная причина в том, что обе операции логически различны. Один будет обрабатывать набор значений, а другой будет обрабатывать скалярные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...