2010-12-15 136 views
1

J'ai regardé ce problème pendant un moment et pendant que je sais que je pourrais faire cela programiticly dans LINQ. J'ai commencé à réfléchir à des solutions qui évolueraient s'il s'agissait d'un grand nombre de données. Je construis mon expérience avec SQL et je crois qu'il existe un moyen d'obtenir le résultat sans effectuer d'insertion.Comment totaliser des groupes et fournir des totaux dans des colonnes séparées?

Ce que j'ai sont des données qui ressemble à ceci:

ids type total 
A01 x 1 
A01 x 2 
A01 x 3 
A01 y 4 
B01 y 2 
B01 x 3 
B01 y 1 
C01 x 1 
C01 y 2 
C01 x 5 
C01 y 6 

Ce que je veux des données qui ressemble à ceci:

id x total y total 
A01 6 4 
B01 3 3 
C01 6 8 

je ma croyance erronée?

Répondre

3
... 
    SUM(CASE type WHEN'x' THEN total ELSE 0 END), 
    SUM(CASE type WHEN 'y' THEN total ELSE 0 END) 
    ... 
    Group by 
     Id 

Désolé difficile de donner une réponse complète sur le téléphone

+0

Je pense que vous voulez résumer un compte. C'est le bon format, mais "total" ne fonctionnera pas. –

+0

@mark sqldev: la somme conditionnelle est ce qui est nécessaire. Pourquoi somme de compte? – gbn

+0

Je vois, vous l'avez alors, les données me semblaient comme un ID. Vous avez raison (+1) –

1

Ceci est appelé un tableau croisé dynamique, et il y a plusieurs façons d'y parvenir.

Si vous utilisez SQL Server 2005 ou plus tard, l'opérateur PIVOT (MSDN) est une option nette:

select id, [x], [y] 
from temp d 
    PIVOT (sum(total) for type in ([x],[y])) p