2014-01-23 33 views
0

我有一個存檔信息的存檔表。其中一個存儲的值是一個ID,可以將其與另一個表中的分區名稱關聯起來。這個ID的值可以是0或大於0.如果該值爲0,它是不可用的,我只是希望它顯示一個空字符串(NULL也可以),如果ID大於0,我想用與其相關的地區名稱替換該ID。注意:我不能直接將ID返回到Districts表,因爲它會返回多個重複記錄(因此返回Top(1))。從嵌套在案例陳述中的子查詢中返回單值

這實際上是可能的,如果不是有另一種方法?

SELECT TeacherID, StartTime, EndTime, 

    (Case TeacherScheduleArchice.TeacherStudent_ServiceTypeID 

    When 0 THEN '' 

    Else 

    SELECT Top(1) DistrictName From Districts Where District.TeacherStudent_ServiceTypeID = TeacherScheduleArchice.TeacherStudent_ServiceTypeID 

    END) As District 

    FROM   TeacherScheduleArchive 

回答

0

你只需要一組額外的括號:

SELECT TeacherID, StartTime, EndTime, 
     (Case TeacherScheduleArchice.TeacherStudent_ServiceTypeID 
      When 0 THEN '' 
      Else (SELECT Top(1) DistrictName 
        From Districts 
        Where District.TeacherStudent_ServiceTypeID = TeacherScheduleArchice.TeacherStudent_ServiceTypeID 
       ) 
     END) As District 
FROM TeacherScheduleArchive; 
+0

完美,謝謝。 – cmartin

0

這應該是可能的,你只要把周圍的子查詢括號 - 並且可以讓他們離開周圍的CASE

SELECT TeacherID, StartTime, EndTime, 
    Case TeacherScheduleArchice.TeacherStudent_ServiceTypeID 
    When 0 THEN '' 
    Else 
    (SELECT Top(1) DistrictName 
     From Districts 
    Where District.TeacherStudent_ServiceTypeID = TeacherScheduleArchice.TeacherStudent_ServiceTypeID 
    ) 
    END As District 
    FROM   TeacherScheduleArchive 

不過,我會用DISTINCT代替Top(1)爲如果只有一個值,則返回單個值,只需重複幾次。但是,如果有相同的TeacherStudent_ServiceTypeID的不同值,則會導致錯誤。這會警告你,而不是返回一個任意的條目。