通过考虑多个列值有效地应用过滤器

时间:2017-05-22 18:51:02

标签: sql sql-server

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

条件1:当国家=美国办公室='仅限美国地区 时,不会应用过滤器。

条件2:如果同一提交号码有多行,那么我需要检查国家/地区=美国和其他国家/地区(例如ID'和第3条记录),然后去办公室"并选择该Office的 ID

条件3:对于只有一行的任何非美国家/地区,请将相同的行添加到最终结果中。

查询:

从Table1中选择*

+---+------------+-------------+-----------------+
|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        |   
+---+------------+-------------+---------------- +

1 个答案:

答案 0 :(得分:0)

我认为你可以通过group by,count和sub查询等聚合函数在你的情况下做很多事情。你表达规则的方式可能是正确的,但不是非常友好的SQL。例如,查询如何知道哪些Office值位于美国?

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