2011-08-16 1 views
0

Deux tables:lignes de comptage dans une table pour vérifier si elles correspondent à la valeur dans une autre table

attendee_tables: company_id int, ind_company_name varchar, billets int

participants: company_id int, prenom varchar , last_name varchar,

attendee_tables contient une colonne appelée tickets qui contient le nombre de tickets achetés par une société. Le tableau attendees sont les déclarants. Je voudrais une requête qui retourne les entreprises et le nombre de qui ne sont pas dans le tableau attendees OU ils n'ont pas le même nombre d'entrées dans attendees que le nombre de billets qu'ils ont dans attendees_tables.

Ce que j'ai jusqu'à présent:

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) 

Cela semble fonctionner correctement me donner la première partie de ma question, les entreprises qui ne disposent pas toutes les entrées de la table attendees.

+0

Si une entreprise a tous les participants ont représenté, avez-vous besoin d'une ligne pour leur montrer zéro? – Matthew

Répondre

1

Essayez ceci:

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 
2

Uncomment l'endroit où filtrer uniquement les lignes non-concordance

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 
Questions connexes