根据同一行中的另一个值从行中选择某个值

Posted

技术标签:

【中文标题】根据同一行中的另一个值从行中选择某个值【英文标题】:Selecting certain value from row based on another value in same row 【发布时间】:2019-06-04 16:50:53 【问题描述】:

我有一个包含以下数据的表格:

表格

现在我想获取所有那些在 B 列中没有值 5 的用户(仅不同)。我的意思是 user1 在某行中有值 5,然后所有用户 1 行都被解雇。

应产生以下结果: user2(因为值为空) user3(无值 5)

我该怎么做?

【问题讨论】:

【参考方案1】:

也许最简单的方法是按用户聚合:

SELECT ColumnA
FROM yourTable
GROUP BY ColumnA
HAVING COUNT(CASE WHEN ColumnB = 5 THEN 1 END) = 0;

【讨论】:

【参考方案2】:

一种方法是聚合:

select columnA
from t
group by columnA
having sum(case when columnB = 5 then 1 else 0 end) = 0;

【讨论】:

感谢您的回复...所以听起来可能需要一段时间(不像 100K,它基本上是自动的)。【参考方案3】:

您可以通过减号运算符来做到这一点

SELECT distinct colA
FROM have
WHERE colB not in(5)
MINUS
SELECT distinct colA 
FROM have
WHERE colB=5;

【讨论】:

【参考方案4】:

使用NOT EXISTS可以得到结果

SELECT DISTINCT T1.ColumnA
FROM TableName T1
WHERE NOT EXISTS (
   SELECT * FROM TableName T2 WHERE T2.ColumnA = T1.ColumnA AND T2.ColumnB <> 5
)

【讨论】:

【参考方案5】:

另一种方式-

SELECT DISTINCT T1.ColumnA
FROM TableName T1
WHERE T1.ColumnA NOT IN 
(
   SELECT T2.ColumnA FROM TableName T2 WHERE T2.ColumnB = 5
)

【讨论】:

以上是关于根据同一行中的另一个值从行中选择某个值的主要内容,如果未能解决你的问题,请参考以下文章

熊猫将非空值从行中获取到一个单元格中[重复]

T:SQL:从行中选择值作为列

当同一行中的另一个单元格在 Javascript 中具有值时,验证一个单元格是不是成为必需的

如何根据特定列的值从 CSV 文件中选择值

根据另一列的另一个值和/或另一行中的同一列更新设置值:-ORA 1427

将扩展选择参数值从一个作业传递到 Jenkins 管道中的另一个远程作业