Помогите с исправлением некоторого быстрого синтаксиса SQL, внутреннего объединения на новом столбце

Хорошо так скажите, что я Col1, Col2, и COl3 существуют в MyTable. Однако [Интервал] не делает.

Select Col1,Col2,Col3, [Interval] = CASE
WHEN (cast(segstart as float) - floor(cast(segstart as float))) >= (cast(@TweleveAM as float) - floor(cast(@TweleveAM as float))) THEN CAST('0' as smallint) End
FROM MyTable

Но теперь я хочу использовать новый столбец, как который я сделал в соединении так

Inner Join NewTable New on Interval = New.starttime

Как я делаю это? Я, может казаться, не нахожу правильный синтаксис

1
задан CodingIsAwesome 27 June 2010 в 02:23
поделиться

1 ответ

Большинство RMDBS не позволяют использовать псевдонимы столбцов в основной части непосредственного оператора SQL. Некоторые из них разрешают это в предложениях GROUP BY и HAVING.

Вы можете обойти это с помощью подзапроса, но это может вызвать проблемы с производительностью. Лучше всего просто повторить уравнение.

В случае, если вам интересно, метод подзапроса будет выглядеть следующим образом:

SELECT
    col1,
    col2,
    col3,
    Interval
FROM
(
    SELECT
        col1,
        col2,
        col3,
        CASE
            WHEN CAST(segstart AS FLOAT) - FLOOR(CAST(segstart AS FLOAT)) >=
                 CAST(@TweleveAM AS FLOAT) - FLOOR(CAST(@TweleveAM AS FLOAT))
                 THEN CAST(0 AS SMALLINT)
        END AS interval
    FROM
        My_Table
) AS SQ
INNER JOIN New_Table NEW ON
    NEW.start_time = SQ.Interval

Другой вариант - использовать функцию, определяемую пользователем (если вы используете MS SQL Server) или любой эквивалент в вашей СУБД. Имейте в виду, что там также могут быть проблемы с производительностью, поэтому обязательно проверьте его на производительность. Тем не менее, это позволит вам хранить все уравнения в одном месте.

2
ответ дан 2 September 2019 в 23:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: