我有一个大查询,它返回的行中有一个列具有重复的值,例如:
| sysid | col1 | col2
| A | 1 | 2
| A | 2 | 3
| B | 1 | 4
sysid
是我要筛选的列,因此在上面的示例中,我只需要输出的最后一行,因为A多次出现。我尝试这样做以过滤掉它们:
CREATE TABLE #temp (SysId VARCHAR(10), col1 INT);
INSERT INTO #temp VALUES ('A', 1), ('B', 1), ('A', 1);
WITH cte AS (
SELECT * FROM #temp
), sysids AS (
SELECT SysId FROM #temp GROUP BY Sysid HAVING COUNT(*) = 1
)
SELECT * FROM #temp WHERE EXISTS (SELECT SysId FROM sysids);
DROP TABLE #temp;
在上面的示例中,我希望final select只包含B行。但我仍然得到了所有这些,我不明白为什么。
显然,在这个具体的例子中,我不需要
cte
但我真正的查询对于多个联合是非常复杂的。