Sql 比较两个表之间的列计数
我有两个表A和B。我想比较代理的保单编号计数。我使用以下查询:Sql 比较两个表之间的列计数,sql,sql-server,Sql,Sql Server,我有两个表A和B。我想比较代理的保单编号计数。我使用以下查询: agent_pay stautus_ind policy_number 1011 B 1 1012 B 2 1013 B 3 1014 B 4 1015
agent_pay stautus_ind policy_number
1011 B 1
1012 B 2
1013 B 3
1014 B 4
1015 B 5
1018 B 7
agent policy_number service_ind
1011 1 X
1012 1 S
1013 3 X
1014 4 S
1011 7 X
1011 8 S
我没有得到预期的结果。有人能帮忙吗
select
count(a.policy_number),
a.agent_pay,
count(b.policy_number),
b.agent
from [AdventureWorksDW2012].dbo.[table1] a
inner join [AdventureWorksDW2012].dbo.[table2] b
on a.agent_pay = b.agent
group by a.agent_pay, b.agent
我还需要表1代理的数据,因为它们的计数与表2不匹配
预期结果如下:
代理人(薪酬政策)(编号)
1011 1
1015 5
1016 6
1018 7
(No column name) agent_pay (No column name) agent
1 1011 3 1011
1 1012 1 1012
1 1013 1 1013
1 1014 1 1014
在不知道预期结果的情况下,不确定您在这里寻找的是什么也许这就是您想要的:
select agent_pay, count(policynumber) cnt from (
Select agent_pay, policynumber from table1
union all
select agent, policynumber from table2)a
group by agent_pay
我会使用
union all
和group by
:
SELECT
agent_pay,
policyCountA,
COUNT(b.policy_number) AS policyCountB
FROM (
SELECT
a.agent_pay,
COUNT(a.policy_number) AS policyCountA
FROM [AdventureWorksDW2012].dbo.[table1] a
GROUP BY agent_pay
) d
LEFT JOIN [AdventureWorksDW2012].dbo.[table2] b ON d.agent_pay = b.agent
GROUP BY agent_pay, policyCountA
这将包括任一表中的所有代理。如果需要计数不匹配的代理,可以添加
having sum(in_1)sum(in_2)
。您已经选择了一个解决方案,但既然您提出了这个问题,下面是我的看法:
select agent, sum(in_1) as num_1, sum(in_2) as num_2
from ((select agent_pay as agent, 1 as in_1, 0 as in_2
from table1
) union all
(select agent as agent, 0 as in_1, 1 as in_2
from table2
)
) a
group by agent;
结果应该如下所示。这是你想要的吗
select
coalesce(a.id, b.id) as id,
coalesce(count_a, 0) as count_a,
coalesce(count_b, 0) as count_b
from (
select agent_pay as id, count(*) as count_a from table1
group by agent_pay
) a
full join (
select agent as id, count(*) as count_b from table2
group by agent
) b on a.id = b.id;
您预期的结果是什么?您使用了哪些DBMS?我使用Sql Server是的,预期的结果是什么?请添加所需的结果表。我已添加了预期结果。您好,我已添加了一个新方案。您可以帮助吗?但表a中代理1011的策略编号计数为1,但显示为3。如何添加?您需要向我们显示您的预期结果,否则我们无法帮助-我再次更新了上面的答案,这是否有效?(无列名)代理付费(没有列名称)代理1 1011 3 1011 1 1012 1 1012 1 1013 1 1013 1 1014 1 1014 1表格请填写表格如何将数据以表格的形式放在这里。我没有任何选择?代理\你的支付政策\你的号码10111 1012 1015 1016 1018 7我想要这些信息,因为它们的计数匹配,但它们的记录不匹配matched@TirthaRoyChowdhury如果我没有弄错的话,您想根据表中给定的保单号计算代理的工资A.仅当表A中的保单号码与表B中的保单号码匹配时。因此,结果将为1011=1、1013=1、1014=1,其余为零。这就是您所需要的吗?从中选择不同的代理人付款、保单号码(从[AdventureWorksDW2012].dbo中选择A.agent付款、A.policy号码。[表1]a联合体全部从[AdventureWorksDW2012].dbo中选择b.agent,b.policy_编号。[表2]b)d组按代理支付,policy_编号有计数(*)=1按代理付款的订单首先检查计数,如果匹配,则检查表2中是否存在代理、保单号。如果记录不匹配,则显示表1中的代理、保单号@预期结果:代理付款保单号-----------------------1011 1012 1015 1016 1018 7
id count_a count_b
---- ------- -------
1011 1 3
1012 1 1
1013 1 1
1014 1 1
1015 1 0
1018 1 0