SQL Server 2016将类似行作为列进行计数,而不重复查询

SQL Server 2016将类似行作为列进行计数,而不重复查询,sql,sql-server,Sql,Sql Server,我有一个SQL查询,它返回与此伪表类似的数据: | Name | Id1 | Id2 | Guid | |------+-----+-----+------| | Joe | 1 | 1 | 1123 | | Joe | 2 | 1 | 1123 | | Joe | 3 | 1 | 1120 | | Jeff | 1 | 1 | 1123 | | Moe | 3 | 42 | 1120 | 我希望在输出上显示一个附加列,列出具有与给定行匹配的GUI

我有一个SQL查询,它返回与此伪表类似的数据:

| Name | Id1 | Id2 | Guid |
|------+-----+-----+------|
| Joe  | 1   | 1   | 1123 |
| Joe  | 2   | 1   | 1123 |
| Joe  | 3   | 1   | 1120 |
| Jeff | 1   | 1   | 1123 |
| Moe  | 3   | 42  | 1120 |
我希望在输出上显示一个附加列,列出具有与给定行匹配的GUID的记录总数,如下所示:

| Name | Id1 | Id2 | Guid | # Matching |
+------+-----+-----+------+------------+
| Joe  | 1   | 1   | 1123 | 3          |
| Joe  | 2   | 1   | 1123 | 3          |
| Joe  | 3   | 1   | 1120 | 2          |
| Jeff | 1   | 1   | 1123 | 3          |
| Moe  | 3   | 42  | 1120 | 2          |

我可以通过将查询本身连接起来并进行计数来实现这一点。但是,该查询相当大,需要一段时间才能完成,是否有任何方法可以在不将查询与自身连接的情况下完成此操作?

您想要一个窗口功能:

select t.*, count(*) over (partition by guid) as num_matching
from t;

谢谢这正是我想要的。优雅,戈登。