我在SSNID列中得到重复项。需要帮助。 [英] I'm getting duplicates in the SSNID column. Need assistance.

查看:91
本文介绍了我在SSNID列中得到重复项。需要帮助。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  SELECT   distinct  

dsp .SSNID,
案例 fsa.Assigned_CNT> 0
dsp.rcms_Grade_CD in ' E4'' E5'​​' E6'' E7'' E8'
fsp.Promotable_CNT = 1 dpc.InPositionOfHigherGrade_YN = 1
dsp.rcms_ComponentCategory_CD<> ' AGR'
dsp.APFT_Result_CD<> ' F'
qcsp.SFPA_CNT = 0
qcsp.SFPA_Adverse_CNT = 0
然后 fsa.Assigned_CNT 其他 0 结束 as ' EnlistedPromotionEligible'
案例 何时 fsa.Assigned_CNT> 0
dsp.rcms_Grade_CD in ' < span class =code-string> O1',' O2'' O3'' O4'
fsp.Promotable_CNT = 1 dpc.InPositionOfHigherGrade_YN = 1
(fps.fr_Packet_CNT< 1 fps.fr_Packet_CNT null
dsp.rcms_ComponentCategory_CD<> ' AGR'
dsp.APFT_Result_CD<> ' F'
qcsp.SFPA_CNT = 0
qcsp.SFPA_Adverse_CNT = 0
然后 fsa.Assigned_CNT 其他 0 结束 as ' OfficerPromotionEligible'
,dsp.rcms_Grade_CD
,dp.rcms_PositionGrade_CD
' InHigherPos' =案例 dp.rcms_PositionGrade_CD null 然后 0 何时 dp.rcms_PositionGrade_CD> fsa.rcms_Grade_CD 然后 1 其他 0 结束
,fps.fr_Packet_CNT
,dsp.APFT_Result_CD
,dsp .rcms_ComponentCategory_CD
,dpc.InPositionOfHigherGrade_YN as ' PromoReqInPositionOfHigherGrade_YN'
,dpc.ReqCollegeDegree_YN
,fsp.MeetsCollegeReq_CNT
,dpc.ReqMilitaryEducation
,mil.Code as ' MilitaryEducation_CD'
,rcms_MilitaryEducation_Desc
,fsp.MeetsMILEDReq_CNT
,dpc.ReqMonthsInGrade
' 成绩月份 = floor((datediff( dd,dsp.rcms_Rank_DT,fsp.Run_DT)+1)/ 30. 42
,fsp.MeetsMoInGradeReq_CNT
,dpc.ReqMonthsInService
' 服务月数 = floor(( datediff(dd,dsp.rcms_PEBD_DT,fsp.Run_DT)+1)/ 30. 42
,fsp.MeetsMoInServiceReq_CNT

FROM [G1Lifecycle_DW]。[dbo] .FactStrengthAssessment fsa
JOIN G1LifeCycle_DW..DimSoldierPersonnel DSP < span class =code-keyword> on DSP.ID = FSA.SoldierID FSA.Run_DT> = dsp.Start_DT (fsa.Run_DT< dsp.End_DT dsp.End_DT null
JOIN [G1Lifecycle_DW]。[dbo]。[FactSoldierPromotability] fsp on fsp。 SoldierID = fsa.SoldierID
JOIN [G1Lifecycle_DW]。[dbo]。[DimPromotionCriteria] dpc on dpc.ID = fsp.PromotionCriteriaID
JOIN [G1Lifecycle_DW]。[dbo]。[DimPosition] DP on DP.ID = fsa.PositionID
LEFT JOIN [G1Lifecycle_DW]。[ dbo]。[FactFedRecPacketStatus] fps on fps.ssnid = DSP.ssnid
left join G1Lifecycle_LOOKUPS.dbo.Lkp_MilitaryEducation_CD mil on DSP.MilitaryEducation_CD = mil.Code mil.End_DT null
JOIN [G1Lifecycle_DW]。[dbo]。[QQRCurrentSoldierPASS] QCSP qcsp.SSNID = dsp.SSNID
WHERE

dsp.rcms_Grade_CD in ' E4'' E5'​​' E6'' E7'' E8'' O1'' O2'' O3 '' O4'

dsp.End_DT null





我尝试过的事情:



我试过看案例。

解决方案

< blockquote>你得到了重复项,因为你的联接正在识别符合条件的多个记录。

除了你自己,没有人能解决它 - 你需要检查你的数据。



这样做最简单的方法就是注释掉联接&他们的相关列,直到重复消失&然后确定为什么你的一个表有多个记录而你没有预期呢



亲切的问候


SELECT distinct 

dsp.SSNID,
Case When fsa.Assigned_CNT>0 and 
    dsp.rcms_Grade_CD in('E4','E5','E6','E7','E8') and
    fsp.Promotable_CNT = 1 and dpc.InPositionOfHigherGrade_YN = 1 
    and dsp.rcms_ComponentCategory_CD <> 'AGR'
    and dsp.APFT_Result_CD <> 'F'
    and qcsp.SFPA_CNT = 0 
    and qcsp.SFPA_Adverse_CNT =0
    Then fsa.Assigned_CNT Else 0 End as 'EnlistedPromotionEligible'
, Case When fsa.Assigned_CNT>0 and 
    dsp.rcms_Grade_CD in ('O1','O2','O3','O4') and
    fsp.Promotable_CNT = 1 and dpc.InPositionOfHigherGrade_YN = 1 and 
    (fps.fr_Packet_CNT < 1 or fps.fr_Packet_CNT is null)
    and dsp.rcms_ComponentCategory_CD <> 'AGR'
    and dsp.APFT_Result_CD <> 'F'
    and qcsp.SFPA_CNT = 0 
    and qcsp.SFPA_Adverse_CNT =0
    Then fsa.Assigned_CNT Else 0 End as 'OfficerPromotionEligible'
,dsp.rcms_Grade_CD
,dp.rcms_PositionGrade_CD
, 'InHigherPos' =Case When dp.rcms_PositionGrade_CD is null Then 0 When dp.rcms_PositionGrade_CD > fsa.rcms_Grade_CD Then 1 Else 0 End
,fps.fr_Packet_CNT
,dsp.APFT_Result_CD
,dsp.rcms_ComponentCategory_CD
,dpc.InPositionOfHigherGrade_YN as 'PromoReqInPositionOfHigherGrade_YN'
,dpc.ReqCollegeDegree_YN
,fsp.MeetsCollegeReq_CNT
,dpc.ReqMilitaryEducation
,mil.Code as 'MilitaryEducation_CD'
,rcms_MilitaryEducation_Desc
,fsp.MeetsMILEDReq_CNT
,dpc.ReqMonthsInGrade
,'Months in grade' = floor((datediff(dd,dsp.rcms_Rank_DT, fsp.Run_DT)+1)/30.42)
,fsp.MeetsMoInGradeReq_CNT
,dpc.ReqMonthsInService
,'Months in service' = floor((datediff(dd,dsp.rcms_PEBD_DT, fsp.Run_DT)+1)/30.42)
,fsp.MeetsMoInServiceReq_CNT

FROM [G1Lifecycle_DW].[dbo].FactStrengthAssessment fsa
JOIN G1LifeCycle_DW..DimSoldierPersonnel DSP on DSP.ID = FSA.SoldierID and FSA.Run_DT >= dsp.Start_DT and (fsa.Run_DT < dsp.End_DT or dsp.End_DT is null)
JOIN [G1Lifecycle_DW].[dbo].[FactSoldierPromotability] fsp on fsp.SoldierID = fsa.SoldierID
JOIN [G1Lifecycle_DW].[dbo].[DimPromotionCriteria] dpc on dpc.ID= fsp.PromotionCriteriaID
JOIN [G1Lifecycle_DW].[dbo].[DimPosition] DP on DP.ID = fsa.PositionID
LEFT JOIN [G1Lifecycle_DW].[dbo].[FactFedRecPacketStatus] fps on fps.ssnid = DSP.ssnid
left join G1Lifecycle_LOOKUPS.dbo.Lkp_MilitaryEducation_CD mil on DSP.MilitaryEducation_CD=mil.Code and mil.End_DT is null
JOIN [G1Lifecycle_DW].[dbo].[QQRCurrentSoldierPASS] QCSP on qcsp.SSNID=dsp.SSNID
WHERE 

dsp.rcms_Grade_CD in('E4','E5','E6','E7','E8', 'O1','O2','O3','O4') and

dsp.End_DT is null



What I have tried:

I've tried looking at the cases.

解决方案

You are getting duplicates because your joins are identifying multiple records that meet the criteria.
There is no way anyone can resolve it but yourself - you need to review your data.

The easiest way of doing this is to comment out joins & their associated columns until the duplicates disappear & then determine why one of your tables has multiple records where you are not expecting it to

Kind Regards


这篇关于我在SSNID列中得到重复项。需要帮助。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆