Я попытался сделать SQL-запрос с вложенным SELECT для той же таблицы (UID в таблице полиморфный).
Проблема в том, что мой вложенный 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 в моем вложенном запросе?