本文介绍了如何在单个查询中使用主表列获取子表行数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我正在使用MS SQL Server 2012 DB有一个主表和一个子表。 我需要master中的一些列,其中有活动(Status = 1)和不活动(Status = 0)子记录计数。请参考下面给出的示例数据表 我通过编写存储过程得到了结果。但我正在寻找一个更好的查询或具有良好性能的CTE。 主表中的近似行数(表A):500 子表中的近似行数(表B):300000且大小正在增加 表A ********************** **** Col1 Col2 Col3 1 A1 A11 2 A2 A12 3 A3 A13 表B *********************** **** Col1 Col2 Col3状态 1 1 B1 1 1 2 B2 1 2 3 B3 0 2 4 B4 1 3 5 B5 1 结果 **** ********************** A.Col1 A.Col2 ActiveCount InactiveCount 1 A1 2 0 2 A2 1 1 3 A3 1 0 任何帮助?? .. 这是我现有的查询 SELECT T1。*,( SELECT COUNT(Col2) FROM B WHERE B.Col1 = T1.Col1 AND B.Status = ' A') AS ActiveCount,( SELECT COUNT(Col2) FROM B WHERE B.Col1 = T1。 Col1 AND B.Status = ' R ') AS InactiveCount,( SELECT COUNT(Col2) FROM B WHERE B.Col1 = T1.Col1 AND B.Status = ' B') AS BlockedCount,( SELECT COUNT(Col2) FROM B WHERE B.Col1 = T1.Col1 AND B.Status = ' C') AS CancelledCount, ( SELECT COUNT(Col2) FROM B WHERE B.Col1 = T1.Col1 AND B.Status = ' D') AS DeactivatedCount FROM ( SELECT Col1,Col2,Col3 FROM A WHERE A.Col1 IN ( SELECT DISTINCT B.Col1 FROM B WHERE B.ColXX = ' TRUE')) AS T1 解决方案 I am using MS SQL Server 2012DB has one master and one child table. I need some columns from master with number of active(Status=1) and inactive(Status=0) child records count. Please refer sample data table given belowI got the result by writing stored procedure. But I am looking for a better query or CTE with good performance. Approximate Row count in Master Table (Table A) : 500Apporximate Row Count in Child Table (Table B) : 300000 and size is increasingTable A**************************Col1 Col2 Col31 A1 A112 A2 A123 A3 A13Table B***************************Col1 Col2 Col3 Status1 1 B1 11 2 B2 12 3 B3 02 4 B4 13 5 B5 1Result **************************A.Col1 A.Col2 ActiveCount InactiveCount1 A1 2 02 A2 1 13 A3 1 0Any help??..Here is my existing querySELECT T1.* , (SELECT COUNT (Col2 ) FROM BWHERE B.Col1 =T1.Col1 AND B.Status='A') AS ActiveCount,(SELECT COUNT (Col2 ) FROM BWHERE B.Col1 =T1.Col1 AND B.Status='R') AS InactiveCount,(SELECT COUNT (Col2 ) FROM BWHERE B.Col1 =T1.Col1 AND B.Status='B') AS BlockedCount,(SELECT COUNT (Col2 ) FROM BWHERE B.Col1 =T1.Col1 AND B.Status='C') AS CancelledCount,(SELECT COUNT (Col2 ) FROM BWHERE B.Col1 =T1.Col1 AND B.Status='D') AS DeactivatedCountFROM (SELECT Col1 ,Col2 ,Col3 FROM A WHERE A.Col1 IN (SELECT DISTINCT B.Col1 FROM B WHERE B.ColXX='TRUE')) AS T1 解决方案 这篇关于如何在单个查询中使用主表列获取子表行数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-23 09:35