【问题标题】:Counting rows in one table to check if they match value in another table计算一个表中的行以检查它们是否与另一个表中的值匹配
【发布时间】:2011-08-16 17:57:50
【问题描述】:

两张表:

参加者表格: company_id 整数, ind_company_name varchar, 门票 int

与会者: company_id 整数, first_name varchar, 姓氏 varchar,

attendee_tables 包含一个名为tickets 的列,其中包含公司购买的门票数量。 attendees 表是注册人。我想要一个查询,返回不在attendees 表中的公司和人数,或者他们在attendees 中的条目数与他们在attendees_tables 中的票数不同。

到目前为止我所拥有的:

select    
    t.company_id,  
    t.ind_company_name,  
    sum(t.tickets)  
from  
    attendee_tables t 
left outer join 
    attendees a  
        on t.company_id = a.company_id  
where  
    a.company_id is null  
group by  
    t.company_id, t.ind_company_name  
order by  
    sum(t.tickets)  

这似乎工作正常,给了我问题的第一部分,attendees 表中没有任何条目的公司。

【问题讨论】:

  • 如果一家公司的所有与会者都占了,您是否需要一行让他们显示为零?

标签: sql sql-server-2005 tsql


【解决方案1】:

取消注释 where 以仅过滤掉那些不匹配的行

select  
   t.company_id, 
   t.ind_company_name, 
   t.tickets, 
   isnull(attcnt.attendeecount, 0) as attendeecount
from  attendee_tables t 
left join 
  (select company_id, count(*) as attendeecount from attendees group by company_id) attcnt
on attcnt.company_id = t.company_id
-- where t.tickets <> attcnt.attendeecount

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT t.company_id, t.ind_company_name, t.tickets attendee_tables_Tickets, a.Tickets attendees_Tickets
    FROM attendee_tables t 
    LEFT JOIN (SELECT company_id, COUNT(*) Tickets FROM attendees GROUP BY company_id) a  
        ON t.company_id = a.company_id  
    WHERE t.tickets <> ISNULL(a.Tickets,0) OR A.company_id IS NULL
    

    【讨论】:

      猜你喜欢
      • 2014-12-10
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多