2016-04-16 3 views
0

ich versuche die Anzahl der Kunden durch ihre Typen und Gruppen alle in Linie als solche zu erhalten:, wie mehrere Zählfunktionen und Gruppen byes enthalten in einer Zeile

Groupname | Gruppennotizen | Anzahl (Typ1) | Zählen (Typ2) | Graf (Typ3)

sondern kann ich nur die groupid bekommen, die typeid und die Anzahl der Arten in der Gruppe mit der folgenden Abfrage

SELECT 
    CustomersGroups.idCustomerGroup , Customers.type , COUNT(*) 
FROM 
    CustomersGroups 
    inner Join CustomersInGroup on CustomersGroups.idCustomerGroup = CustomersInGroup.idCustomerGroup 
    inner Join Customers on Customers.idCustomer = CustomersInGroup.idCustomer 
Group by 
    CustomersGroups.idCustomerGroup, Customers.type 

ist es eine Möglichkeit, sie in einer einzigen Zeile zu zeigen, , (und den Namen der Gruppe anzeigen?)

Antwort

3

Dies ist eine "Pivot" -Abfrage. Einige Datenbanken unterstützen direkt die Syntax pivot. Insgesamt können Sie bedingte Aggregation verwenden.

Vielleicht wichtiger, sollten Sie lernen, Tabellen Aliase zu verwenden. Diese machen Abfragen einfacher zu schreiben und zu lesen:

select cg.idCustomerGroup, 
     sum(case when c.type = 'Type1' then 1 else 0 end) as num_type1, 
     sum(case when c.type = 'Type2' then 1 else 0 end) as num_type2, 
     sum(case when c.type = 'Type3' then 1 else 0 end) as num_type3 
from CustomersGroups cg inner Join 
    CustomersInGroup cig 
    on cg.idCustomerGroup = cig.idCustomerGroup inner Join 
    Customers c 
    on c.idCustomer = cig.idCustomer 
Group by cg.idCustomerGroup; 
+0

sorry für nicht Aliase Ich werde auf jeden Fall überlegen die Verwendung in zukünftigen Fragen und vielen Dank für die Beantwortung :) –

Verwandte Themen