2017-05-27 1 views
1

J'ai utilisé SQL pendant un certain temps mais je ne dirais pas que je suis à un niveau avancé. J'ai bricolé avec essayant de comprendre moi-même en vain.Comment sélectionner plusieurs valeurs de comptage (*) puis grouper par une colonne spécifique

J'ai deux tables - transaction et TransactionType:

| **TransactionID** | **Name** | **TransactionTypeID** | 
| 1 | Tom | 1 | 
| 2 | Jim | 1 | 
| 3 | Mo | 2 | 
| 4 | Tom | 3 | 
| 5 | Sarah | 4 | 
| 6 | Tom | 1 | 
| 7 | Sarah | 1 | 


| **TransactionTypeID** | **TransactionType** | 
| 1 | A | 
| 2 | B | 
| 3 | C | 
| 4 | D | 

Le Transaction.TransactionTypeID est une clé FOREIN liée TransactionType.TransactionTypeID sur le terrain.

Voici ce que je voudrais obtenir:

Je voudrais une requête (ce sera une procédure stockée) qui retourne trois colonnes:

Nom - la valeur de la Transaction.Name colonne.

NumberOfTypeATransactions - le décompte du nombre de toutes les transactions de type 'A' pour cette personne.

NumberOfNonTypeATransactions - le nombre du nombre de toutes les transactions qui ne sont PAS de type A pour cette personne, c'est-à-dire tous les autres types de transactions.

Ainsi, en utilisant les données ci-dessus à titre d'exemple, le jeu de résultats serait:

| **Name** | **NumberOfTypeATransactions** | **NumberOfNonTypeATransactions** | 
| Tom | 2 | 1 | 
| Jim | 1 | 0 | 
| Mo | 0 | 1 | 
| Sarah | 1 | 1 | 

je pourrais avoir besoin aussi de rendre les résultats basés sur une période de date (qui sera basée sur une « date de la transaction 'colonne dans la table des transactions, mais je n'ai pas encore finalisé cette exigence

Toute aide sur la façon dont je peux y parvenir serait très appréciée. comment les formater correctement encore

Répondre

1

est juste l'agrégation conditionnelle avec join:

select t.name, 
     sum(case when tt.TransactionType = 'A' then 1 else 0 end) as num_As, 
     sum(case when tt.TransactionType <> 'A' then 1 else 0 end) as num_notAs 
from transaction t join 
    transactiontype tt 
    on tt.TransactionTypeID = t.TransactionTypeID 
group by t.name; 
+0

Cela semble avoir fait le tour - merci pour votre aide! –