如果我有两列,我如何选择列的所有不同值,其中列永远不是特定值,因为 columnA 是相同的值?

Posted

技术标签:

【中文标题】如果我有两列,我如何选择列的所有不同值,其中列永远不是特定值,因为 columnA 是相同的值?【英文标题】:If I have two columns, how can I select all distinct values of columnA where columnB is never a specific value given that columnA is the same value? 【发布时间】:2021-08-10 07:25:03 【问题描述】:

假设我有两列:

A B
1 300
1 299
2 300
2 300
3 299
3 299

我想寻找 A 的不同值,使得 B 等于 300 时不存在 A 和 B 的组合。 在我的示例中,我想返回 columnA 值 3。

结果

A
3

我如何使用 SQL 完成此操作?

【问题讨论】:

根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。 请添加您的预期结果。 @Rezu 对于这种情况,我的预期结果只是值 3,因为它是 columnA 中唯一不包含 columnB 中对应值 300 的 id。 顺便说一句,不要太担心反对票。我认为您已经正确解释了您的问题。只是您应该自己尝试一些事情并告诉我们您到底卡在哪里。然而,对于这种任务,SQL 初学者通常很难想出任何东西。 【参考方案1】:

您要查找的内容称为条件聚合。您想按 A 聚合(即在结果中显示 A 值)并仅对特定的 B 值进行检查。例如:

select a
from mytable
group by a
having count(case when b = 300 then 1 end) = 0;

【讨论】:

【参考方案2】:

一个简单的subquery 将给出结果。

使用 NOT IN 关键字排除行

SELECT DISTINCT ColumnA 
FROM TABLE 
WHERE ColumnA NOT IN(
    SELECT ColumnA FROM Table WHERE ColumnB=300)

【讨论】:

【参考方案3】:

你也可以使用 NOT EXISTS

SELECT DISTINCT A 
FROM tbl t1
WHERE NOT EXISTS(
    SELECT 1 FROM Tbl t2 WHERE t2.A=t1.B AND t2.B=300)

【讨论】:

以上是关于如果我有两列,我如何选择列的所有不同值,其中列永远不是特定值,因为 columnA 是相同的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据创建标识符和最大日期的两列选择行

如何根据其他列的某些值替换列的nan值

excel下拉菜单的数据源如何选择两列数据

如何在excel中将两列对应的数据以其中一列的排序 求教各位高手

有没有办法“合并”两列,其中新列的值是具有特定值的原始列的名称,分组明智?

SQL Server:在具有两列的表上进行无聚合的旋转