首页 > 解决方案 > 根据标志添加/删除 SQL 查询中的两个重复结果

问题描述

我有一个包含数据的表,其中我想抓取所有带有零标志的行以及带有我选择的正标志的行,然后我希望它从包含相同数据的查询中删除所有数据,但是具有负标志值。目前,我正在前端处理所有这些,方法是获取所有 0 和正标志值,然后获取所有负值并将它们从我的第一个结果集中删除所有标志 >= 0 且与负标志行匹配的行。

这些东西总是有点用文字来描述,所以这里有一个示例,我的数据集看起来类似于以下内容:

flag    name    loc
0       Fred    USA
-1      Fred    USA
1       Fred    CANADA
0       Ryan    CANADA
0       Steph   SPAIN
-1      Steph   SPAIN
1       Steph   CANADA
-2      Steph   CANADA
2       Steph   RUSSIA

如果我想要标志为 1 的所有数据,我希望返回以下内容

flag    name    loc
1       Fred    CANADA
0       Ryan    CANADA
1       Steph   CANADA

如果 flag 只是 2,我会想要

flag    name    loc
0       Fred    USA
0       Ryan    CANADA
2       Steph   RUSSIA

最后,如果标志是 1 或 2,我会想要

flag    name    loc
1       Fred    CANADA
0       Ryan    CANADA
2       Steph   RUSSIA

请注意,尽管在此示例中标志似乎是连续的,但不能假定较高的标志项是要选择的最终标志行。此外,这是一个更大查询的子查询,它根据此查询收集信息。主查询可以包含任意数量的标志。

此操作在查询中是否可行,还是我应该继续在前端进行繁重的工作?

小提琴:http ://sqlfiddle.com/#!18/de297/1

谢谢

标签: sqlsubquery

解决方案


这满足您的前两个要求,但我不确定如果

如果标志是 1 或 2,我会想要

方法

DECLARE @YourInt INT = 2     

SELECT    flag,
          name,
          loc
INTO      #YourInts
FROM      table1
WHERE     flag = @YourInt

SELECT   flag,
         name,
         loc
FROM     #YourInts
UNION ALL
SELECT   flag,
         name,
         loc
FROM     table1
WHERE    flag = 0 AND
         name NOT IN (SELECT name FROM #YourInts WHERE flag = @YourInt)

推荐阅读