Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 比较两个表之间的列计数_Sql_Sql Server - Fatal编程技术网

Sql 比较两个表之间的列计数

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

我有两个表A和B。我想比较代理的保单编号计数。我使用以下查询:

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