列出每个人具有多个性别值的记录

时间:2016-09-15 12:23:38

标签: sql-server sql-server-2008

我在表格中有两列感兴趣的内容。它们是“PersonID”,是每个人的唯一ID和“性别”列。

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

如何编制显示已记录为男性和女性的“PersonID”的所有行的列表?

所以我的表在当下看起来的一个例子是这样的: 4439; 1 4439; 1 4439; 1 4439; 1 4439; 1 4439; 0 4439; 0

其中4439 = PersonId,1 =男性(0 =女性)

我只想要一个列表,为我提供性别字段中同时包含1和0的所有PersonID

4 个答案:

答案 0 :(得分:1)

更新

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

答案 1 :(得分:0)

这可以解决你,

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

答案 2 :(得分:0)

试试这个。

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

答案 3 :(得分:0)

您只需计算每个人的不同性别代码的数量:

let toggle_event = null;
try {
    toggle_event = new Event("toggle");
}
catch (error) {
    toggle_event = document.createEvent("Event");
    let doesnt_bubble = false;
    let isnt_cancelable = false;
    toggle_event.initEvent("toggle", doesnt_bubble, isnt_cancelable);
}
// disclosure_control is a details element.
disclosure_control.dispatchEvent(toggle_event);