对于某些上下文:我试图在DTH、TPD或IP 3种可能的保险类型中找到只有1种保险类型的任何成员。现在,1名成员可以有1或2或所有类型的保险。
现在我在SQL中有2列,A列有成员号,如果成员有多种类型的保险,则可以重复该成员的成员号。B栏有明显包含重复保险的保险类型。
如何筛选我的查询,以查找仅具有IP类型保险的A列中的成员。我试着使用‘不喜欢’和‘不在’操作符来筛选我想要的保险类型,但是我仍然得到一些成员也有我不想要的其他类型的保险,我甚至不能导出数据到excel,并手动检查,因为数据量太大了。例如,我希望只有IP、DTH或TPD的成员。有什么想法吗?
发布于 2022-07-05 03:09:57
一般来说,这些成员只有一份记录(一种保险):
SELECT
member,
COUNT(member) as total
FROM Table
GROUP BY member
HAVING COUNT(member) = 1;这里的想法是,如果一个成员有一种保险,你会看到一条记录,所以计数是(1),但是如果一个成员有两种保险,他们就有两种记录,所以计数是(2),以此类推。
接下来,为了更详细地了解它们,既然您现在知道您感兴趣的成员,只需使用该结果集再次连接到原始表:
SELECT A.*
FROM Table A
INNER JOIN
(
SELECT
member,
COUNT(member) as total
FROM Table
GROUP BY member
HAVING COUNT(member) = 1
) B
ON A.member = B.member;现在,您可以看到这些成员的详细信息(保险类型)。
现在,你说“B列有明显包含重复保险的保险类型”。这是有点不清楚,但如果你真的是这个意思,那么你将不得不删除重复,所以,与上面一样,但更多的数据清理。例如,如果您的数据有一个成员( DTH类型为一行,而类型为TPD )为两行,则需要这样做,因此我们希望对该成员进行计数(2),而不是(3)!
SELECT
X.member,
COUNT(X.member) as total
FROM (SELECT DISTINCT member, type FROM Table) X
GROUP BY X.member
HAVING COUNT(X.member) = 1;对于同样的更完整的版本:
SELECT DISTINCT A.*
FROM Table A
INNER JOIN
(
SELECT
X.member,
COUNT(X.member) as total
FROM (SELECT DISTINCT member, type from Table) X
GROUP BY X.Member
HAVING COUNT(X.member) = 1
) B
ON A.member = B.memberhttps://stackoverflow.com/questions/72863557
复制相似问题