Хорошо так скажите, что я 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
Как я делаю это? Я, может казаться, не нахожу правильный синтаксис
Большинство 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) или любой эквивалент в вашей СУБД. Имейте в виду, что там также могут быть проблемы с производительностью, поэтому обязательно проверьте его на производительность. Тем не менее, это позволит вам хранить все уравнения в одном месте.