2013-04-23 251 views
0

多列,請看看下面的SQL查詢:另一個子查詢使用從子查詢的列和選擇子查詢

我想存儲在@startlog列值log_LogId(6號線),這樣我可以稍後在第15行使用它。還是有任何其他方式來實現這一目標?

我不能寫在一行6 @log_LogId = log_LogId它顯示語法錯誤。

另一個問題是,我怎麼能在第一子查詢中選擇多個列?也許喜歡 (SELECT TOP 1 log_LogId, log_Cost .....

在此先感謝。

DECLARE @startlog INT 
SELECT 
    log_VehicleId AS gpsId, 
    log_LogId AS ignOnLogId, 
    (SELECT TOP 1 
     log_LogId ---Set this value to @startlog so that I can use this in "HERE" 
      --- Also Select another column here 
     FROM VehicleLog 
     WHERE log_Eventid = 6012 AND log_LogId > v2.log_LogId 
     AND log_VehicleId = v2.log_VehicleId 
    ) ignOffLogId, 
    (SELECT SUM(CAST(log_COG AS FLOAT)) 
     FROM VehicleLog 
     WHERE log_LogId >= v2.log_LogId 
     AND log_LogId <= @startlog ---**HERE** 
    ) 
from VehicleLog v2 
WHERE log_Eventid = 6011 AND log_LogId < 300 

回答

0

可以使用CTE(公共表表達式)如下:

;WITH CTE_V2 AS 

(

    SELECT 

     log_VehicleId 
     , log_LogId 
    FROM 
     VehicleLog 

    WHERE 
     log_Eventid = 6011 AND log_LogId < 300 

) 

, CTE_IGN_OFF AS 

(

    SELECT TOP 1 

     log_LogId ---Set this value to @startlog so that I can use this in "HERE" 

     ,log_OtherColumn --- Also Select another column here 

    FROM 
     VehicleLog 

    WHERE 
     log_Eventid = 6012 
     AND log_LogId > (SELECT MAX(CTE_V2.log_LogId) 
       FROM CTE_V2 WHERE VehicleId = CTE_V2.log_VehicleId) 
) 
, CTE_COG AS 
(
    SELECT 
     log_VehicleId AS gpsId 
     , log_LogId AS ignOnLogId 
     , SUM(CAST(log_COG AS FLOAT)) sum_COG 
     FROM 
     VehicleLog 
     WHERE 
     log_LogId >= (SELECT MAX(CTE_V2.log_LogId) 
       FROM CTE_V2 WHERE VehicleId = CTE_V2.log_VehicleId) 
      AND log_LogId <= (SELECT TOP 1 log_OtherColumn FROM CTE_IGN_OFF) 
    GROUP BY 
     log_VehicleId 
     , log_LogId 
) 
SELECT * FROM CTE_COG; 
+0

嗨,它顯示錯誤:'消息207,級別16,狀態1,行32 無效的列名稱log_VehicleId 」。 消息207,級別16,狀態1,行31 無效的列名稱log_LogId'.'雖然在數據庫 – sha256 2013-04-23 21:52:24

+0

@ sha404對不起存在的專欄中,我我們它在firts更名爲其它列CTE,因此它可以在第二個引用第一個的地方找不到它。請參閱上面的更新回答。 – Charl 2013-04-24 07:13:43

+0

嘿,感謝您的答覆,但仍然得到錯誤:'消息8155,級別16,狀態2,第35行 沒有列名的CTE_COG'.' – sha256 2013-04-24 12:44:19