SQL 2012在表

时间:2015-05-08 17:24:32

标签: sql sql-server

我正在使用SQL 2012并尝试识别SourceDataID列在PartyCode列中有两个唯一条目的行,并且我遇到了困难。

SELECT PartyCode, SourceDataID, count (*) as CNT
FROM CustomerOrderLocation (nolock) 
GROUP BY PartyCode, SourceDataID
HAVING (Count(PartyCode)>1)
ORDER BY PartyCode

结果如此返回:

W3333 948_O 31 (政党代码/ sourcedataid / CNT)

这是向我显示表中列出PartycodeSourceDataID的总条目。但是,我需要它来显示W333不止一次列出948_O SourceDataID的任何实例的计数。

我没有运气构造查询来拉取我想要的结果。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

CTE函数结合的PARTITION BY有助于查找此方式的重复项。代码如下:

WITH CTE AS(
SELECT PartyCode, SourceDataID,
ROW_NUMBER()OVER(PARTITION BY SourceDataID ORDER BY SourceDataID) RN
FROM CustomerOrderLocation (NOLOCK))

SELECT * FROM CTE WHERE RN > 1

这应该返回附加到SourceDataID的每个重复的PartyCode。

如果要查看整个结果,请将上一个SELECT语句更改为:

SELECT * FROM CTE ORDER BY PartyCode, RN

答案 1 :(得分:0)

感谢大家的帮助。我没有尽力描述问题,但这是我最终创建的查询以获取我的结果集。

 ;with cte1 (sourcedataid, partycode) as (select sourcedataid, partycode from customerorderparty (nolock) group by PartyCode, SourceDataID)

select count(sourcedataid), sourcedataid from cte1 group by sourcedataid having count(sourcedataid) >1