2016-09-15 31 views
0

我在表格中有两列感兴趣的列。他们是'PersonID',它是每个人的唯一ID和'性别'列。列出每个人具有多个性别值的记录

我的表对于每个人都有多行,因为每行都反映了他们的名字下的策略。 但是,对于每个人我都注意到一些数据质量问题,其中他们的性别被记录为“男性”的某些行,然后是“女性”的其他人

如何编译所有行的列表显示已被记录为男性和女性的'PersonIDs'?

因此,我的表如何看待这一刻的例子是这样的: 4439; 1 4439; 1 4439; 1 4439; 1 4439; 1 4439; 0 4439; 0

,其中4439 = PERSONID和1 =男(0 =女)

我只想要一个清单给我的一切,在性别字段

回答

0

这样就解决了你,

SELECT ID FROM POLICYTABLE 
WHERE GENDER=0 OR GENDER=1 
GROUP BY ID 
HAVING COUNT(*)>1 
1

更新既有1和0的PersonIDs:

SELECT DISTINCT personid FROM(
SELECT PersonID 
, RANK() OVER (partition by personid order by gender) as rnk 
FROM table t 
) i 
WHERE i.rnk > 1 

而不是@Dan指出的。

SELECT PersonID 
FROM table t 
WHERE t.gender = '0' OR t.gender = '1' 
GROUP BY PersonID 
HAVING COUNT(*) > 1 

如果需要其他信息:

SELECT p.Name, p.lastName, p.DOB 
FROM table p 
WHERE p.PersonID IN 
(
    SELECT PersonID 
    FROM table t 
    WHERE t.gender = '0' OR t.gender = '1' 
    GROUP BY PersonID 
    HAVING COUNT(*) > 1 
) i 
+0

这将返回谁与同性别代码的多个记录,以及个人。 – Dan

+0

@丹你说得对,内德明天要重新工作。 – artm

0

试试这个。

SELECT PersonID 
FROM 
(
    SELECT PersonID,Gender 
    FROM table 
    GROUP BY PersonID,Gender 
) as DATA 
GROUP BY PersonID 
HAVING COUNT(*) > 1 
0

你只需要依靠每个人的不同性别代码的数量:

SELECT PersonID 
FROM MyTable 
GROUP BY PersonID 
HAVING COUNT(DISTINCT Gender) > 1 
相关问题