Подсчет строк в одной таблице для проверки их соответствия значению в другой таблице - PullRequest
0 голосов
/ 16 августа 2011

Два стола:

attendee_tables: company_id int, ind_company_name varchar, билеты int

участники: company_id int, имя_посвященник, фамилия варчар,

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.

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

Раскомментируйте, где отфильтровывать только те строки, которые не соответствуют

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
1 голос
/ 16 августа 2011

Попробуйте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...