使用SQL中的共享ID从许多不同的表中检索计数和求和

时间:2015-04-24 22:09:09

标签: sql sql-server

我需要检索SQL Server数据库中所有表中存在共享主Prgm_ID的相关子程序的数量。主表T_Program存储有关父程序的基本信息,但是大约有20个表包含与给定Prgm_ID相关的子程序的信息(IE如果程序的ID是11353,则T_Program表,该ID可能在每个具有子程序的其他表中出现多次。

我想要做的是Prgm_ID表中的每个T_Program,获取所有子程序的计数并加总它们,然后查看该数字是否超过500.我真的不确定如何处理这个问题。此查询仅返回其中一个表的所需结果:

select Prgm_ID, COUNT(prgm_type_a_ID) as TypeA_Count
from T_Prgm_Type_A
order by Prgm_ID

我想要做的是找到总共子程序总数超过500的所有Prgm_ID。这个查询返回了我希望包含在总和中的一个表,但我想要每个表计数加起来,然后在一列中为每个Prgm_ID求和。

基于上述查询,如果给定的Prgm_ID在该查询中返回了200的计数,那么对于其他表中的一个,它的计数为350,而其他所有表都为0 {{ 1}},我希望最终的选择查询的结果如下所示:

Prgm_ID

如果子程序表中所有不同计数的最终总和超过500,我希望它显示| Prgm_ID | Subprgm_Count | | 11353 | 550 | 并给我所有这些不同计数的总和。

1 个答案:

答案 0 :(得分:1)

您希望使用UNION ALL将查询链接到每个表格,然后针对您的记录执行COUNT,确保GROUP BY您的Prgm_ID。

SELECT Prgm_ID, COUNT(ID) AS Subprgm_Count FROM (
    SELECT a.prgm_type_a_ID AS ID, Prgm_ID FROM TableA a UNION ALL
    SELECT b.prgm_type_b_ID, b.Prgm_ID FROM TableB b UNION ALL
    SELECT c.prgm_type_c_ID, c.Prgm_ID FROM TableC c
)t
GROUP BY Prgm_ID
HAVING COUNT(ID) >= 5 --Your limit here

SQL Fiddle example