Sql 如果有多个列,则查询不选择列

Sql 如果有多个列,则查询不选择列,sql,database,select,Sql,Database,Select,我一直在为这事挠头 对于同一个项目,我有一个包含多个列的表。 但是,每个项目可以有多个不同类型的行 我只想找到类型为O的项目,并且只有当它们没有其他类型与之关联时 例: 在上述情况下,只应返回项目2 是否有查询或方法来筛选此信息?欢迎提供任何建议。您可以使用“不存在”来执行此操作: 您还可以使用聚合来执行此操作: select p.project_num from projects p group by p.project_num having sum(case when p.type = 'O

我一直在为这事挠头

对于同一个项目,我有一个包含多个列的表。 但是,每个项目可以有多个不同类型的行

我只想找到类型为O的项目,并且只有当它们没有其他类型与之关联时

例:

在上述情况下,只应返回项目2

是否有查询或方法来筛选此信息?欢迎提供任何建议。

您可以使用“不存在”来执行此操作:

您还可以使用聚合来执行此操作:

select p.project_num
from projects p
group by p.project_num
having sum(case when p.type = 'O' then 1 else 0 end) > 0 and
       sum(case when p.type <> 'O' then 1 else 0 end) = 0;
您可以使用“不存在”来执行此操作:

您还可以使用聚合来执行此操作:

select p.project_num
from projects p
group by p.project_num
having sum(case when p.type = 'O' then 1 else 0 end) > 0 and
       sum(case when p.type <> 'O' then 1 else 0 end) = 0;

如果我理解正确,您希望检查项目是否只有其项目编号的记录,并且其类型为“O”。您可以使用以下查询来实现此功能:

;with cte_proj as
(
select Project_Num from YourTable    
group by Project_Num
having count(Project_Num) = 1)
select Project_Num from cte_proj c
inner join YourTable t on c.Project_Num = t.Project_Num
where t.Type = 'O'

如果我理解正确,您希望检查项目是否只有其项目编号的记录,并且其类型为“O”。您可以使用以下查询来实现此功能:

;with cte_proj as
(
select Project_Num from YourTable    
group by Project_Num
having count(Project_Num) = 1)
select Project_Num from cte_proj c
inner join YourTable t on c.Project_Num = t.Project_Num
where t.Type = 'O'

另一个选择相当快

SELECT p0.*
FROM project p0
  LEFT JOIN project p1 ON (p0.Type<>p1.Type AND p0.Project_Num=p1.Project_Num)
WHERE p0.Type='O' AND p1.Type IS NULL;

另一个选择相当快

SELECT p0.*
FROM project p0
  LEFT JOIN project p1 ON (p0.Type<>p1.Type AND p0.Project_Num=p1.Project_Num)
WHERE p0.Type='O' AND p1.Type IS NULL;

谢谢,我试试看谢谢,我试试看