2011-12-01 28 views
0

我試圖在同一個表上使用嵌套SELECT進行SQL查詢(表中的UID是多態的)。嵌套SELECT在事務SQL中返回NULL

問題是我的嵌套SELECT始終返回NULL。

下面是該查詢:

SELECT 
    Ent.UID, 
    Measurement.MeasurementClass AS Type, 
    Substation.TG8000_Name AS Station, 
    SUBSTRING(Measurement.TG8000_Name,1,5) AS Travee, 
    SUBSTRING(Measurement.TG8000_Name,6,8) AS Equipement, 
    Measurement.ClonedFromMeasurement, 
    (SELECT TOP 1 TG8000_Name 
     FROM [BD_Sonel_PTG].[dbo].[Measurement] 
     WHERE (UID=Measurement.ClonedFromMeasurement)) AS Template, 
    LongName.LongName AS Description, 
    Measurement.MeasurementUnit AS Units, 
    MeasurementLimit.LowLimit, 
    MeasurementLimit.HighLimit, 
    RTU.TG8000_Name AS RTUName, 
    RTU.RTUProtocol, 
    RTU.Configuration AS RTUConfiguration, 
    Telemetry.Address, 
    Measurement.DisplayName AS Display, 
    REPLACE(Measurement.MeasurementClass,' ','')+':'+REPLACE(Substation.TG8000_Name,' ','')+'.'+REPLACE(Measurement.TG8000_Name,' ','') AS Tren 

    FROM EntityName Ent 

    LEFT JOIN LongName ON Ent.UID = Longname.UID /* chaque point possède une description pour une langue donnée */ 
    LEFT JOIN Measurement ON Ent.UID = Measurement.UID /* chaque point de type measurement possède des infos suppl dansla table Measurement */ 
    LEFT JOIN Substation ON Measurement.Substation = Substation.UID /* chaque point est lié à l'UID d'une station (Table Substations) */ 
    LEFT JOIN Telemetry ON Telemetry.DataSourceFor = Ent.UID /* 1 point télémétré est lié à une entrée de Telemetry (DataSourceFor) */ 
    LEFT JOIN MeasurementLimit ON Ent.UID = MeasurementLimit.UID /* Chaque point de type measurement est lié à des paramètres limites */ 
    LEFT JOIN RTU ON Telemetry.RTU = RTU.UID /* chaque point télémétré est associé à un l'UID d'un RTU dont les paramètres sont dans la table RTU */ 
/* LEFT JOIN EntityName Ent2 ON Ent.UID = Measurement.ClonedFromMeasurement*/ 

    WHERE Ent.EntityType = 'Measurement' 

    ORDER BY Substation.TG8000_Name, Measurement.TG8000_Name; 

    GO 

當我執行的嵌套一個硬編碼值9616選擇,它的作品!

... (SELECT TOP 1 TG8000_Name 
     FROM [BD_Sonel_PTG].[dbo].[Measurement] 
     WHERE (UID='9616')) AS Template, 
... 

所以我想這是進入Measurement.ClonedFromMeasurement不工作...

但是當你在查詢中看到的,我也輸出Measurement.ClonedFromMeasurement的價值看什麼在那裏,我正確地收到了我的9616的價值(這是逐行的變化)。

如何在我的嵌套查詢中訪問Measurement.ClonedFromMeasurement?

回答

0

嘗試做一個自我加入這個

(SELECT TOP 1 TG8000_Name 
FROM [BD_Sonel_PTG].[dbo].[Measurement] m1,m2 on 
m1.UID = m2.ClonedFromMeasurement) AS Template 

OR

(SELECT TOP 1 TG8000_Name 
FROM [BD_Sonel_PTG].[dbo].[Measurement] 
where UID in (select distinct ClonedFromMeasurement from 
[BD_Sonel_PTG].[dbo].[Measurement]) AS Template 
+0

不,對不起,它沒有使:-( –

+0

在子查詢中,變量是本地的...所以我不能訪問它沒有創建一個新的變量名稱(請參閱在這裏創建的變量Ent2 ) ...(SELECT TOP 1 Ent2.TG8000_Name FROM [BD_Sonel_PTG] [DBO]。[測定] ENT2 WHERE(Ent2.UID = Measurement.ClonedFromMeasurement))爲模板,) ... –

0

是 「UID」 的INT列?如果是的話,試試你的WHERE子句中使用

UID=Convert(int,Measurement.ClonedFromMeasurement)

+0

對不起,它沒有成功。感謝您的幫助 –