我有一个复杂的查询,该查询输入到一个名为#tempTBRB 的简单临时表中。
select * from #tempTBRB ORDER BY AccountID 会产生以下结果集:
在所有情况下,当给定的 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/