【发布时间】:2015-01-01 02:45:17
【问题描述】:
您好,我有以下 SQL 查询,我想有条件地将两个 DB 列(DEA 和 DEA_ALT)之一的结果返回到一个结果列中,具体取决于这两个列中的哪一个被赋值(非空)。数据库设置在其中有两个字段可以存储一个名为 DEA# 的字段,但是两个字段具有相同的目的,因此我想根据哪一列的值返回任一列的结果(可以是任何一个)。
SELECT Distinct t1.UserName,
t1.[LoginID],
t7.FirstName,
t7.LastName,
t7.Title ,
t7.EndDateOfValidity,
NPI = ISNULL(HStaffIdentifiers.Value,''),
Type= HStaffIdentifiers.Type,
DEA=ISNULL(t5.PrescriberCode,''),
--
--
DEA_ALT = ISNULL((select CASE ISNULL(PC.PrescriberCode,'')
when '' then ISNULL(HS.Value,'')
end
from HStaff PC
left outer join HStaffIdentifiers HS
ON PC.ObjectID = HS.Staff_oid
where HS.Type = 'DEA'
and HS.Staff_oid = HStaffIdentifiers.Staff_oid
),ISNULL(t5.PrescriberCode,'')),
--
--
Speciality = ISNULL(HDataDictionaryItem3.Description,''),
Preference_Group = HDataDictionaryItem1.Name
FROM HSUser t1 with (nolock)
Left Outer JOIN HStaff t5 with (nolock)
ON t1.UserName=t5.MSINumber
LEFT OUTER JOIN HStaffIdentifiers HStaffIdentifiers WITH (NOLOCK)
ON t5.ObjectID = HStaffIdentifiers.Staff_oid
AND HStaffIdentifiers.Type = 'NPI'
JOIN HPerson t6 with (nolock)
ON t5.ObjectID=t6.ObjectID
JOIN HName t7 with (nolock)
ON t6.ObjectID=t7.Person_oid
and (t7.EndDateOfValidity < '2010-01-01 00:00:00.000'
or t7.EndDateOfValidity is null)
JOIN HDataDictionaryItem HDataDictionaryItem1 WITH (NOLOCK)
ON t1.PreferenceGroup_oid = HDataDictionaryItem1.ObjectID
AND HDataDictionaryItem1.ItemType_oid = 98
left outer join HDataDictionaryItem HDataDictionaryItem3 WITH (NOLOCK)
ON t5.PrimarySpeciality_oid = HDataDictionaryItem3.ObjectID
AND HDataDictionaryItem3.ItemType_oid = 43
WHERE
t1.EndTime >= GETDATE()
AND t1.BeginTime<=GETDATE()
AND t5.Active=1
AND t6.IsDeleted=0
AND t5.StaffType = 0
order by t7.LastName, t7.FirstName
来自以下链接的结果片段: http://s7.postimg.org/i5xlsjhnv/12_31_2014_10_00_13_AM.jpg
从查询结果(以红色突出显示)中可以看出,在某些情况下,DEA 可能仅填充在这两列之一中,但是我希望将结果返回到 DEA 列中的单个列,如果它被重视,如果没有,那么我想检查 DEA_ALT 是否被重视,如果是,则将结果返回到这一列。我怎样才能做到这一点?
【问题讨论】:
-
当两列都被赋值时会发生什么
标签: sql-server