请帮助更正一些快速SQL语法,新列上的内部联接

请帮助更正一些快速SQL语法,新列上的内部联接,sql,syntax,inner-join,Sql,Syntax,Inner Join,好吧,假设我的表中有Col1、Col2和COl3。但是,[Interval]没有 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

好吧,假设我的表中有Col1、Col2和COl3。但是,[Interval]没有

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
但是现在我想使用我在一个join中创建的新列,就像这样

Inner Join NewTable New on Interval = New.starttime

我该怎么做?我似乎找不到正确的语法

大多数rmdbs不允许在immediate SQL语句的主体中使用列别名。他们中的一些人允许分组,并有子句

您可以通过使用子查询绕过它,但这可能会导致性能问题。你最好的办法就是重复这个等式

如果您感兴趣,子查询方法如下所示:

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
另一种选择是在RDBMS中使用用户定义的函数(如果您使用的是MS SQL Server)或任何等效函数。请记住,这里也可能存在性能问题,所以一定要测试它的性能。它可以让你把方程都放在一个地方