2016-12-27 110 views
2

我有以下子查询返回多个值。存储

SELECT 
    CASE 
     WHEN ISNULL(dbo.EducationalBackground.SchoolId,'') = '' 
      AND ISNULL(dbo.EducationalBackground.SchoolName,'') <> '' 
      THEN 
      (SELECT a.SchoolName 
       FROM dbo.EducationalBackground AS A 
       INNER JOIN dbo.PersonEducationalBackground as B ON a.EducationalBackgroundId = b.EducationalBackgroundId 
       WHERE b.PersonId = @PersonId AND a.EducationalLevelId = 1) 

     WHEN ISNULL(dbo.EducationalBackground.SchoolId,'') = '' 
      AND ISNULL(dbo.EducationalBackground.SchoolName,'') = '' 
      THEN 'N/A' 

     ELSE 
      (SELECT dbo.School.SchooldName 
      FROM dbo.School 
      INNER JOIN dbo.EducationalBackground ON dbo.School.SchoolId = dbo.EducationalBackground.SchoolId 
      INNER JOIN dbo.PersonEducationalBackground ON dbo.EducationalBackground.EducationalBackgroundId = dbo.PersonEducationalBackground.EducationalBackgroundId 
      WHERE dbo.PersonEducationalBackground.PersonId = @PersonId) 
    END AS SchoolName 
FROM  
    dbo.EducationalBackground 
INNER JOIN 
    PersonEducationalBackground ON dbo.EducationalBackground.EducationalBackgroundId = PersonEducationalBackground.EducationalBackgroundId 
INNER JOIN 
    dbo.Person ON PersonEducationalBackground.PersonId = dbo.Person.PersonId 
INNER JOIN 
    PIMS.Employee ON PIMS.Employee.PersonId = dbo.Person.PersonId 
INNER JOIN 
    dbo.EducationLevel ON dbo.EducationLevel.EducationLevelId = dbo.EducationalBackground.EducationalLevelId 
WHERE 
    dbo.Person.PersonId = @PersonId 
    AND dbo.EducationalBackground.EducationalLevelId = 1 

这个SQL查询我上面的标题说的错误。如果U使用SELECT TOP 1它运行良好,但我想从该查询中获取数据。到目前为止,我有两行数据。

回答

1

我修改你的SQL语句,从你的发言有可能返回不同的行,你可以试试,检查您是否想要的结果获得

SELECT case when ISNULL(dbo.EducationalBackground.SchoolId,'') = '' and ISNULL(dbo.EducationalBackground.SchoolName,'') <> '' then 
          EducationalBackground.SchoolName 
       WHEN ISNULL(dbo.EducationalBackground.SchoolId,'') = '' and ISNULL(dbo.EducationalBackground.SchoolName,'') = '' then 'N/A' 
       else School.SchooldName 
       end as SchoolName 

    FROM  dbo.EducationalBackground 
      INNER JOIN PersonEducationalBackground on dbo.EducationalBackground.EducationalBackgroundId = PersonEducationalBackground.EducationalBackgroundId 
      inner JOIN dbo.Person ON PersonEducationalBackground.PersonId = dbo.Person.PersonId 
      inner JOIN PIMS.Employee ON PIMS.Employee.PersonId = dbo.Person.PersonId 
      inner JOIN dbo.EducationLevel ON dbo.EducationLevel.EducationLevelId = dbo.EducationalBackground.EducationalLevelId 
      LEFT JOIN PersonEducationalBackground AS b ON EducationalBackground.EducationalBackgroundId = b.EducationalBackgroundId AND EducationalBackground.EducationalLevelId=1 
      LEFT JOIN dbo.School ON dbo.School.SchoolId = dbo.EducationalBackground.SchoolId AND PersonEducationalBackground.PersonId = @PersonId 

    where dbo.Person.PersonId = @PersonId 
     and dbo.EducationalBackground.EducationalLevelId = 1 
+1

感谢的人。我对sql很陌生 – KiRa