Sql 选择具有特定值的唯一标识符
我知道标题不是很清楚,所以我很抱歉,但我需要一些帮助 我得到了以下数据表:Sql 选择具有特定值的唯一标识符,sql,Sql,我知道标题不是很清楚,所以我很抱歉,但我需要一些帮助 我得到了以下数据表: GROUP_ID CONTACT_ID MAIN_CONTACT_FLAG 11000 28789 0 11000 28049 1 21890 10086
GROUP_ID CONTACT_ID MAIN_CONTACT_FLAG
11000 28789 0
11000 28049 1
21890 10086 0
21890 10554 0
21489 14785 0
21464 12457 1
21654 14558 0
我需要过滤掉任何没有联系人id且主联系人标志设置为1的组id
因此,期望的输出是:
GROUP_ID CONTACT_ID MAIN_CONTACT_FLAG
21890 10086 0
21890 10554 0
21489 14785 0
21654 14558 0
我尝试了以下查询,但没有一个能给出我需要的结果:
SELECT GROUP_ID,MAIN_CONTACT_FLAG FROM Contact_Group_Contacts_T
WHERE MAIN_CONTACT_FLAG != 0 AND MAIN_CONTACT_FLAG != 1
ORDER BY Group_ID DESC
SELECT DISTINCT GROUP_ID,Main_Group_Contact_BT
FROM Contact_Group_Contacts_T
WHERE NOT EXISTS (SELECT * FROM Contact_Group_Contacts_T WHERE MAIN_CONTACT_FLAG IN (0,1))
提前感谢,,
丹
或者如果您只需要组ID
SELECT GROUP_ID
FROM Contact_Group_Contacts_T
GROUP BY GROUP_ID
HAVING SUM(MAIN_CONTACT_FLAG)=0
更新:
您需要将布尔值(位)大小写为要求和的数字
使用总和(当主触点标志=0时,则为0,否则为1结束)
或者如果您只需要组ID
SELECT GROUP_ID
FROM Contact_Group_Contacts_T
GROUP BY GROUP_ID
HAVING SUM(MAIN_CONTACT_FLAG)=0
更新:
您需要将布尔值(位)大小写为要求和的数字
使用SUM(当MAIN\u CONTACT\u FLAG=0时,则为0,否则为1结束)尝试以下操作:
select * from
(
select *,max(MAIN_CONTACT_FLAG) over (partition by GROUP_ID) as final_flag
from tablename
)
where final_flag=0;
试试这个:
select * from
(
select *,max(MAIN_CONTACT_FLAG) over (partition by GROUP_ID) as final_flag
from tablename
)
where final_flag=0;
试试这个:您可以通过使用子查询获得所需的输出
select *
from #tmp
where group_id not in (select distinct group_id from #tmp where main_contact_flag = 1)
或不存在
select t.*
from #tmp t
where not exists (select 1
from #tmp t1 where t.group_id = t1.group_id and t1.main_contact_flag = 1)
试试这个:您可以通过使用子查询获得所需的输出
select *
from #tmp
where group_id not in (select distinct group_id from #tmp where main_contact_flag = 1)
或不存在
select t.*
from #tmp t
where not exists (select 1
from #tmp t1 where t.group_id = t1.group_id and t1.main_contact_flag = 1)
你需要这个
你需要这个
你有很多方法
您的不存在
变体将适用于大多数RDBMS,添加以下内容:
SELECT DISTINCT GROUP_ID
FROM Contact_Group_Contacts_T T1
WHERE NOT EXISTS (
SELECT * FROM Contact_Group_Contacts_T T2
WHERE T2.GROUP_ID = T1.GROUP_ID -- the missing piece!
AND T2.MAIN_CONTACT_FLAG = 1);
在PostgreSQL中,假设MAIN\u CONTACT\u FLAG
为boolean NOT NULL
,有一种简单的方法
你有很多方法
您的不存在
变体将适用于大多数RDBMS,添加以下内容:
SELECT DISTINCT GROUP_ID
FROM Contact_Group_Contacts_T T1
WHERE NOT EXISTS (
SELECT * FROM Contact_Group_Contacts_T T2
WHERE T2.GROUP_ID = T1.GROUP_ID -- the missing piece!
AND T2.MAIN_CONTACT_FLAG = 1);
在PostgreSQL中,假设MAIN\u CONTACT\u FLAG
为boolean NOT NULL
,有一种简单的方法
您好,谢谢您的回复。如果我执行您的任何一个查询,就会出现此错误:操作数数据类型位对于求和运算符无效。您好,谢谢您的回复。如果我执行您的任一查询,就会出现此错误:操作数数据类型位对于求和运算符无效。
MAIN\u CONTACT\u FLAG
的数据类型是什么?您应该始终包括表定义、RDBMS和版本。MAIN\u CONTACT\u FLAG
的数据类型是什么?您应该始终包括表定义、RDBMS和版本。您好,我已经尝试了您的查询,但是经过一些测试,它通过了组ID,该组的主联系人标志设置为1,但在输出查询中未显示这些记录。我建议您在我提供的小提琴中复制相同的记录,以便我可以找出它在哪里中断。嗨,我尝试了您的查询,但是经过一些测试,它通过组ID将主联系人标志设置为1,但没有在输出查询中显示这些记录。我建议您在我提供的小提琴中复制相同的记录,以便我可以找出它在哪里中断。