数据集上下文:表具有一列SEX_CODE
,可以是M,F,B(已婚,因此名称是两个名称的组合)。因此,household_ID
可以具有三个重复项,每个重复项都具有不同的SEX_CODE
,并且可以分为3个单独的sub_id
。 (也有'U'-未知,但是那些从来没有重复的household_ID
,所以我们可以忽略它们)
目标:我需要处理以下情况:
如果household_ID
与SEX_CODE
='M'和'F'重复,则返回这两行。
如果household_ID
与SEX_CODE
='B'和'F'/'M'重复
然后仅返回“ F” /“ M”(或删除“ B”)。
household_ID
的副本与SEX_CODE
='B'和'F'和'M'
然后仅返回“ F”和“ M”(或删除“ B”)。我遇到了几个问题
我的主要查询是按household_ID
和sub_ID
进行分组,因此如果这些行具有相同的household_ID
和{{1 }}。
我不知道该如何分为3种情况。我可以使用sub_ID
和CASE
分为两种情况。
我觉得我需要采用一种完全不同于分组的方式,但是我不知道如何按案例分组。
我可以在Excel中手动删除它们(突出显示重复项>按颜色过滤>过滤性别代码'B'>全部删除'em),但是查询将超过60,000行,所以我想知道是否有可能在COUNT
中。但是,如果不可能做到这一点,请不要担心,我将在Excel中完成。
答案 0 :(得分:0)
假设-ID == person_ID == Household_ID(假设小提琴中存在ID,而person_ID和Household_ID都不存在)。
SELECT id,id_sub,SEX
FROM household hh
WHERE SEX <> 'B'
OR
NOT EXISTS (SELECT 1 FROM household h where h.id=hh.id and ( h.SEX='F' or h.SEX='M') )
ORDER BY id
查询简单地获取所有记录,对于那些具有SEX'B'的记录,它检查表中是否没有具有相同ID的SEX'F'或'M'的记录。 应该注意的是,值“ U”(在OP中未提及)的记录将被复制而无需费时。
如果您希望从存在另一种SEX(F / M)的SEX'B'的表中删除记录,那将非常相似:
DELETE FROM household hh
WHERE SEX = 'B'
AND
EXISTS (SELECT 1 FROM household h where h.id=hh.id and ( h.SEX='F' or h.SEX='M') )
条件明显逆转。