2010-06-27 28 views
1

好吧,說我Col1,Col2和COl3存在MyTable中。但是,[時間間隔]不會。請幫忙修正一些快速的SQL語法,內部加入新列

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 

我該怎麼辦呢?我似乎無法找到正確的語法

回答

2

大多數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服務器),或在任何等效您RDBMS。請記住,那裏也可能存在性能問題,所以請務必對其性能進行測試。它可以讓你把方程全部放在一個地方。