2013-07-29 3 views
0

Voici l'entrée de la liste:somme SQL avec le groupe par

GROUPNUMBER|COUNTRY|COUNT|AMOUNT 
BD2  |US  |4 |2.00 
BD2  |US  |10 |8.00 
BD2  |CANADA |12 |10.00 
BD5  |UK  |2 |1.00 
BD5  |US  |6 |4.00 
BD5  |UK  |8 |6.00 

sortie Résultat nécessaire:

GROUPNUMBER|US_COUNT|US_AMOUNT|NON_US_COUNT|NON_US_AMOUNT 
BD2  |14  |10.00 |12   |10.00 
BD5  |6  |4.00  |10   |7.00 

besoin de séparer le nombre et le montant des États-Unis et NON_US et le groupe par domaine GroupNumber. Est-ce possible dans MS SQL? ?

Merci, Subs

Répondre

1

devrait être faisable avec une déclaration CASE:

SELECT 
    GROUPNUMBER, 
    SUM(CASE WHEN COUNTRY = 'US' THEN [COUNT] ELSE 0 END) AS US_COUNT, 
    SUM(CASE WHEN COUNTRY = 'US' THEN AMOUNT ELSE 0 END) AS US_AMOUNT, 
    SUM(CASE WHEN COUNTRY != 'US' THEN [COUNT] ELSE 0 END) AS NON_US_COUNT, 
    SUM(CASE WHEN COUNTRY != 'US' THEN AMOUNT ELSE 0 END) AS NON_US_AMOUNT 
FROM theTable 
GROUP BY GROUPNUMBER 

SqlFiddle

+0

wow .. merci pour la réponse apprécier. – user2617053

+0

question de suivi besoin également d'un SQL si la valeur du pays est en minuscules "nous". – user2617053

+0

MS SQL Server est insensible à la casse par défaut, je crois, donc cela devrait fonctionner indépendamment. Si le cas est important, vous pouvez utiliser la fonction UPPER() pour forcer le boîtier – Bort