首页 > 解决方案 > 根据第一次查询的结果将列添加到 SQL 结果

问题描述

我想,我正在为应该是一个简单的查询而苦苦挣扎。

我有两张桌子,单位和活动。我的第一个查询是:

select u.unit, u.group, e.zone  
from units u 
left join event e
on u.id = e.id
where u.ag_id = 'FIRE' and u.numbr = 'G0182' and u.status > 1

结果是:

Unit | Group | Zone
M1      44G     8
M2      50F     7

然后我运行另一个查询来确定每个组中有多少总单位处于活动状态:

select count(1) from units where group = '[result]' and status > 1

其中 [result] 是第一个查询的组输出(44G、50F 等)

我想在我的第一个查询中添加第 4 列,该查询仅添加该行的总数,如下所示:

Unit | Group | Zone | Active
M1      44G     8       4
M2      50F     7       3

如何链接这些查询以在一个语句中完成所有操作?

谢谢!

标签: sqlsql-server-2008

解决方案


当您想使 SQL 结果集更宽时,您可以使用 JOIN

select u.unit, u.group, e.zone, x.ctr
from units u 
left join event e on u.id = e.id

INNER JOIN(select group , count(*) as ctr from units where status > 1 GROUP BY group) X ON X.group = u.group


where u.ag_id = 'FIRE' and u.numbr = 'G0182' and u.status > 1

在我看来,第一个查询将排除您以后想要计算的项目(由于它的 where 子句)。这意味着您可以根据新需求 ( where status > 1) 返回源数据,并将它们分组并计算到单独的结果中,然后将其作为子查询放入并加入。

请记住,表可以在查询中出现多次;表只是一个数据块,选择的输出也是如此。SQL Server 将数据块连接到其他数据块,它不关心它是表还是由查询的输出形成的。

使数据块更宽 - JOIN,更高 - UNION,更短 - WHERE,更窄 - SELECT。大多数情况下,SQL 是关于切碎数据块并将它们重新组合在一起以形成不同形状的矩形:D


推荐阅读