我需要检索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 |
并给我所有这些不同计数的总和。
答案 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