SQL Server - 如何根据匹配行过滤行?

标签 sql sql-server t-sql sql-server-2012

我有一个复杂的查询,该查询输入到一个名为#tempTBRB 的简单临时表中。

select * from #tempTBRB ORDER BY AccountID 会产生以下结果集:

enter image description here

在所有情况下,当给定的 AccountID 只有 1 行时,该行应该保留,没有问题。但只要有 2 行(永远不会超过 2 行),我想保留 SDIStatus 为 1 的行,并过滤掉 SDIStatus 为 2 的行。

显然,如果我使用像“WHERE SDIStatus = 1”这样的简单where子句,那是行不通的,因为它会过滤掉很多有效行,其中AccountID只有1行,而SDIStatus是2.

另一种说法是,仅当同一 AccountID 存在另一行时,我才想过滤掉 SDIStatus 为 2 的所有行。当同一个 AccountID 有 2 行时,总会有 1 行 SDIStatus 为 1 和 1 行 SDIStatus 为 2。

我正在使用 SQL Server 2012。它是如何完成的?

最佳答案

SELECT
  AccountID
 ,MIN(SDIStatus) AS MinSDIStatus
INTO #MinTable
FROM #tempTBRB
GROUP BY AccountID

SELECT *
FROM #tempTBRB T
JOIN #MinTable M ON
     T.AccountID = M.AccountID
     AND T.SDIStatus = M.MinSDIStatus

DROP TABLE #MinTable

关于SQL Server - 如何根据匹配行过滤行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21916400/

相关文章:

sql - 我们可以向 SQL Server 数据库/表添加注释或自述文件吗?

java - JOOQ 解析 orderBy 和 orderDirection 以与 dslcontext 一起使用

c# - 如何测试 SQL Server 中的存储过程错误

sql - 未在另一个存储过程中执行的存储过程

sql - 如何选择值列

sql 触发器未按预期工作

在 SQL Server 中插入日期时间的 SQL 查询

SQL 服务器 : copy row and Insert into to the same table but with a different ID

c# - 具有许多通知的 .NET SqlDependency 与高速率轮询?

T-SQL:创建获取路径文件夹并插入文件路径的存储过程