我正在进行数据提取以获取有关员工的一些人口统计信息。
我遇到了缺少员工的问题,因为不是每个人都有一个电话号码(我不知道为什么)
现在我重复了,因为有些人有主要电话号码和非主要电话号码。
它们可以被列出为移动电话,家庭,办公室等。我想要的是,如果员工有一个主要电话号码来列出它,但是如果他们根本没有这个电话号码,我希望它被列为“ N / A”。
这是我下面的查询。感谢您的协助。
SELECT DISTINCT
EJC.PersonTaxIdNo AS [SSN]
,EJC.EmpNo AS [Employee ID]
,ISNULL(EJC.Salutation, 'N/A') AS [Salutation]
,LTRIM(EJC.FirstName) AS [First Name]
,LTRIM(EJC.LastName) AS [Last Name]
,ISNULL(EJC.NameSuffix,'N/A') AS [Suffix]
,VPA.PersonAddress1 AS [Address]
,ISNULL(VPA.PersonAddress2,'') AS [Address 2]
,VPA.PersonAddressCity AS [City]
,VPA.PersonAddressStateAbbrev AS [State]
,VPA.PersonAddressPostalCode AS [Zip]
,CASE WHEN VPH.PersonPhonePrimaryInd = 1 AND (GETDATE() BETWEEN VPH.PersonPhoneFromEffectDate AND VPH.PersonPhoneToEffectDate) THEN VPH.PersonPhoneNo
WHEN VPH.PersonPhoneNo IS NULL THEN 'N/A' END AS [Primary Phone]
FROM CNKronos.CNKronos.dbo.EmployeeJob_Curr EJC
LEFT JOIN CNKronos.CNKronos.dbo.vPERSON_ADDRESSES VPA
ON EJC.PersonIdNo = VPA.PersonIdNo
LEFT JOIN CNKronos.CNKronos.dbo.vPERSON_PHONES VPH
ON EJC.PersonIdNo = VPH.PersonIdNo
WHERE VPA.PersonAddressPrimaryInd = 1
AND GETDATE() BETWEEN VPA.PersonAddressFromEffectDate AND VPA.PersonAddressToEffectDate
ORDER BY LTRIM(EJC.LastName), LTRIM(EJC.FirstName)
。
PersonIdNo | PersonPhoneSeqNo | PersonPhoneTypeIdNo | PersonPhoneType | PersonPhonePrimaryInd | PersonPhoneNo | PersonPhoneExt | PersonPhoneFromEffectDate | PersonPhoneToEffectDate | PersonPhoneChangeDate | PersonPhoneIsSmsSw | WTKPhoneIdNo | Timestamp
71376 | 8129 | 23 | Mobile | 1 | 123-456-7890 | | 2013-11-21 00:00:00.000 | 3000-01-01 00:00:00.000 | 2014-04-10 20:58:53.450 | 0 | 2 | 0x000000000503DB2E
71376 | 8130 | 21 | Work | 0 | 234-567-8901 | | 2013-11-21 00:00:00.000 | 3000-01-01 0:00:00.000 | 2014-04-10 20:58:53.760 | 0 | 3 | 0x000000000503DB31
没有架构很难为您提供解决方案。
因此,我将尝试教您如何使用CTE通用表表达式
在小提琴中,您可以仅选择中的代码WITH
以查看部分结果。
该查询将为您提供在该日期范围内的有效电话。User1有数据User2没有
with current_phone as (
SELECT u.name, p.*
FROM
users u
left join phone p
on u.user_id = p.user_id
and GETDATE() BETWEEN FromDate and ToDate
)
SELECT name, CASE
WHEN phone is null then 'NA'
ELSE phone
END as phone
FROM current_phone
想法是您在CTE中进行少量计算,然后将结果与主表合并。希望能帮助您找到解决方案。
您还可以使用适合您的情况的更好的架构来更新sqlFiddle,并告诉我。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句