我有一个存储信息的存档表。存储的值之一是我可以将其与另一个表中的区域名称关联起来的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 :(得分: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
存在不同的值,则会导致错误。这会警告你,而不是返回任意条目。
答案 1 :(得分: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;