从一列和另一
重复选择不同值我有以下查询,返回其中存在的一些字段重复的行,从一列和另一
SELECT customer_id, first_nm, last_nm, middle_nm, member_id, secret_field
FROM cust_tbl
WHERE secret_field <> '' AND
secret_field IN (SELECT secret_field
FROM cust_tbl
WHERE secret_field <> ''
GROUP BY secret_field
HAVING COUNT(secret_field) >= 2
)`
它返回所希望的结果,例如,
customer_id | first_nm | last_nm | middle_nm | member_id | secret_field
1 | jane | doe | | 1005 | secretvalue1
2 | jane | doe | | 1005 | secretvalue1
5 | jane | doe | m | 1060 | secretvalue1
3 | jon | doe | | 1010 | secretvalue2
4 | jon | doe | a | 3030 | secretvalue2
问题是我想只有在“member_id”不重复的行,因此所需的返回值将是
customer_id | first_nm | last_nm | middle_nm | member_id | secret_field
1 | jane | doe | | 1005 | secretvalue1
5 | jane | doe | m | 1060 | secretvalue1
3 | jon | doe | | 1010 | secretvalue2
4 | jon | doe | a | 3030 | secretvalue2
重复的member_id字段被删除。此外,还有一些行中唯一不同的是customer_id,我需要将这些行完全删除。
也就是说,如果所有具有相同secret_field值的行具有相同的member_ids,我希望那些根本不显示,但是如果秘密值相同,并且有一些具有某些相同member_ids的行,并且一些不同的memeber_ids我想在这种情况下不同的member_ids。
我可以使用一个查询,该查询会给出不同的成员id,其中秘密值是相同的,但有多行。
大多数版本的SQL支持窗口函数。你会写为:
select c.*
from (select c.*,
row_number() over (partition by secret_field, member_id order by member_id) as seqnum,
count(distinct member_id) over (partition by secret_field) as cnt
from cust_tbl c
) c
where seqnum = 1 and cnt > 1;
嗨戈登,试过这个,看起来这不支持我们的数据库。 – TheRealKernel
窗口函数中'distinct'? –
@vkp。 。 。它在大多数数据库中都受支持。还有其他解决方案。 –
我有一个有点麻烦准确理解其意图是在查询背后究竟,但这应该得到你想要的“结果数据”。如果这不适用于您的数据更广泛的情况下,我会尝试适应您的额外信息。
例如,这假设每个具有相同member_id的人都将具有相同的first_nm,last_nm和middle_nm以满足您的条件。如果情况并非如此,我们仍然可以这样做,但是我们必须选择在决定显示的行上显示哪个名称。
SELECT min(customer_id), count(distinct customer_id), first_nm, last_nm, middle_nm, member_id, secret_field
FROM cust_tbl
WHERE secret_field <> '' AND
secret_field IN (SELECT secret_field
FROM cust_tbl
WHERE secret_field <> ''
GROUP BY secret_field
HAVING COUNT(secret_field) >= 2
)
group by first_nm, last_nm, middle_nm, member_id, secret_field
having count(distinct customer_id) > 1
用你正在使用的数据库标记你的问题。你如何选择你想要的行?为什么是1而不是2? –
我需要secret_value相同的所有行,并且member_id不相同,但其中secret_value有多于1行的地方。 – TheRealKernel