Sql server T-SQL Over Partition子句
我试图从这个sql中删除行。这些倍数是由于内部联接中的Contact表造成的。某些PID具有多行ContactType。例如,PID“123”可能有两行表示“EPH”,但数字不同。我们只想退回第一个。我想我应该使用一个过分区,但我似乎不能让它正常工作Sql server T-SQL Over Partition子句,sql-server,tsql,Sql Server,Tsql,我试图从这个sql中删除行。这些倍数是由于内部联接中的Contact表造成的。某些PID具有多行ContactType。例如,PID“123”可能有两行表示“EPH”,但数字不同。我们只想退回第一个。我想我应该使用一个过分区,但我似乎不能让它正常工作 SELECT UPPER(p.LastName) AS 'Last Name' ,UPPER(p.FirstName) AS 'First Name' ,UPPER(p.NickName)
SELECT UPPER(p.LastName) AS 'Last Name'
,UPPER(p.FirstName) AS 'First Name'
,UPPER(p.NickName) AS 'Nick Name'
,p.CC AS 'Cost Center ID'
,UPPER(cc.DBA) AS 'Cost Center'
,UPPER(mbs.Title) AS 'Title'
,UPPER(a.City) AS 'City'
,UPPER(s.Code) AS 'State'
,a.ZipCode AS 'Zip Code'
,c1.Number AS 'Home Number'
,c2.Number AS 'Personal Cell'
,c3.Number AS 'Work Cell'
,p.PID
FROM Personnel p WITH (NOLOCK)
JOIN mbs_Employee mbs WITH (NOLOCK)
ON mbs.PID = p.PID
JOIN CostCenter cc WITH (NOLOCK)
ON cc.CostCenterCode = p.CC
JOIN Address a WITH (NOLOCK)
ON a.PID = p.PID
JOIN ref_State s WITH (NOLOCK)
ON s.StateId = a.StateId
LEFT JOIN Contact c1 WITH (NOLOCK)
ON c1.PID = p.PID
AND c1.ContactType = 'EHP'
LEFT JOIN Contact c2 WITH (NOLOCK)
ON c2.PID = p.PID
AND c2.ContactType = 'EOT'
LEFT JOIN Contact c3 WITH (NOLOCK)
ON c3.PID = p.PID
AND c3.ContactType = 'EWC'
WHERE Termination IS NULL
更新
我最终将Contact的连接更改为
INNER JOIN ( SELECT Number
,PID
,ContactType
FROM ( SELECT Number
,PID
,ContactType
,ROW_NUMBER() OVER ( PARTITION BY ContactType ORDER BY Number DESC ) AS rn
FROM Contact
) c3
WHERE c3.rn = 1
) r3 ON r3.PID = p.PID
AND r3.ContactType = 'EWC'
在(按p.PID顺序按1划分)r上选择行号()<代码> R=1 < /代码>如果你找到了问题的答案,请考虑删除它或回答你自己的问题并接受答案。这样人们就会知道问题已经解决了。