2017-08-28 1 views
1

Ich habe diese TabellenJoining Kunden und Tags Tabelle

Customers 
    CustomerNumber date 
    001    8/1/2017 
    002    8/2/2017 
    003    8/3/2017 

    Tags 
    Index Tag Description 
    1  NEW New customer 
    2  OTHER Some other tag 

    Customers_Tags 
    TagIndex CustomerNumber 
    1   001 
    1   002 
    2   002 
    2   003 

Wie kann ich, in einer einzigen Abfrage, erhalten alle Kunden mit dem Tag 1 und auch alle anderen Tags die Kunden haben? Also, wenn die Suche nach Tag 1 get:

customer tag date 
001   1  8/1/2017 
002   1  8/2/2017 
002   2  8/2/2017 

Antwort

2

exists() mit allen Kunden und Tags zu erhalten, wenn dieser Kunde einen Tag des Index hat 1:

select ct.customernumber, ct.tagindex, c.date 
from customers c 
    inner join customers_tags ct 
    on c.customernumber = ct.customernumber 
where exists (
    select 1 
    from customers_tags i 
    where i.customernumber = ct.customernumber 
    and i.tagindex = 1 
) 

oder mit in():

select ct.customernumber, ct.tagindex, c.date 
from customers c 
    inner join customers_tags ct 
    on c.customernumber = ct.customernumber 
where c.customernumber in (
    select i.customernumber 
    from customers_tags i 
    where i.tagindex = 1 
) 
+0

Danke, funktioniert perfekt. Gibt es eine einfache Möglichkeit, um die Anzahl der Tags nach Kunden hinzuzurechnen? –

+1

@PatrickSchomburg Sie können 'count()' als Fensterfunktion verwenden wie 'select ..., CustomerTagCount = count (*) über (partition by ct.customernumber)' – SqlZim

+1

Du bist großartig, danke. –