
AS 
SELECT q.ProgramName
     FROM
     (
         SELECT 
                CASE
                    WHEN dv.Value IS NULL THEN de.Name
                    ELSE dv.Value
                END AS ProgramName
         FROM DDCLElement de
              LEFT JOIN DDCLProperty p ON p.ElementId = de.Id AND p.Name = 'PROGRAM-ID'
              LEFT JOIN DDCLValue dv ON dv.PropertyId = p.Id
                                         AND dv.ValueTypeId = 1
                                         AND dv.Value IS NOT NULL
                                         AND dv.Value != ''
         WHERE de.DdsTypeId IN (27, 28)
        
	    UNION

         SELECT 
                dv.Value AS ProgramName
         FROM DDCLElement de
              LEFT JOIN DDCLProperty p ON p.ElementId = de.Id  AND p.Name = 'COMPONENT-ID'
              INNER JOIN DDCLValue dv ON dv.PropertyId = p.Id
                                          AND dv.ValueTypeId = 1
                                          AND dv.Value IS NOT NULL
         WHERE de.DdsTypeId IN (11)
        
	    UNION

         SELECT 
                dv.ReferenceName AS ProgramName
         FROM DDCLElement de
              LEFT JOIN DDCLProperty p ON p.ElementId = de.Id AND p.Name = 'TASK'
              INNER JOIN DDCLValue dv ON dv.PropertyId = p.Id
                                          AND dv.ValueTypeId IN (2, 4)
         WHERE de.DdsTypeId IN (26)
     ) AS q
     WHERE q.ProgramName IS NOT NULL	
	


	

