通过考虑多个列值来有效地应用筛选器



我有以下数据表,该表是使用MS SQL从大型表中提取的。我正在尝试通过每个策略只有一个提交否来获得最终结果。我希望应用具有以下条件的过滤器。任何帮助/想法将不胜感激!

条件 1:当国家/地区 = 美国且 Office ="仅限美国位置">时,不会应用任何筛选器。

条件2:当有同一提交编号的多行时,我需要检查国家/地区=美国和其他国家/地区(例如ID的第3和第5条记录(,然后转到"办公室"并选择该办公室的ID

条件 3:对于任何只有一行的非美国国家/地区,请选择同一行以获得最终结果。

查询:

从表 1 中选择 *,其中

桌子

+---+------------+-------------+-----------------+
|ID |    Office  | Country     | SubmissionNo    |
+---+------------+-------------+-----------------+
| 1 | Toronto    | Canada      |  0121-01        | 
| 2 | Atlanta    | US          |  0121-02        |   
| 6 | Atlanta    | US          |  0121-04        |    
| 3 | Toronto    | Canada      |  0121-032       |   
| 5 | Toronto    | US          |  0121-032       |   
| 9 | New York   | Canada      |  0121-05        |   
| 8 | New York   | US          |  0121-05        |   
+---+------------+-------------+---------------- +

预期成果

+---+------------+-------------+-----------------+
|ID |    Office  | Country     | SubmissionNo    |
+---+------------+-------------+-----------------+
| 1 | Toronto    | Canada      |  0121-01        | 
| 2 | Atlanta    | US          |  0121-02        |   
| 6 | Atlanta    | US          |  0121-04        |    
| 3 | Toronto    | Canada      |  0121-032       |      
| 8 | New York   | US          |  0121-05        |   
+---+------------+-------------+---------------- +

我认为您可以在使用分组依据、聚合函数(如计数和子查询(的情况下做很多事情。 你表述规则的方式可能是正确的,但对SQL不是很友好。 例如,查询如何知道哪些 Office 值位于美国?

select
from Table1 T1
join
(
select SubmissionNo,count(*)
from Table1
group by SubmissionNo
) T2
on T1.SubmissionNumber = T2.SubmissionNumber.

最新更新