2009-06-02 1 views
1

je l'ensemble de résultat suivant:SQL Pivot sur sous-ensemble

type | Méthode | Montant

Type1 Espèces
Type1 Montant du chèque
Type2 Espèces
Type2 Montant du chèque
Type3 Espèces
Type3 Montant du chèque


Et je veux le faire paraître comme ceci:

Type | Argent comptant | Vérifiez

Type1 Montant Montant
Montant Montant Type2
Type3 Montant Montant

Comment puis-je obtenir cela dans T-SQL (2005 ok syntaxe)? Je dois pivoter par type (1, 2, 3 ...)

Répondre

0

est ici une tentative de PIVOT:

select * 
from YourTable 
PIVOT (sum(amount) FOR Method in (Cash,Check)) as Y 

Étant donné qu'il est juste deux colonnes, pourrait essayer avec une jointure:

select 
    type 
, cash = a.amount 
, check = b.amount 
from yourtable a 
full join yourtable b on a.type = b.type 
where a.method = 'cash' or b.method = 'Check' 
+0

Merci. Il y a d'autres colonnes - ce n'est qu'une illustration. –

0

Ou mieux encore:

select 
    Type 
, Cash = sum(case when Method = 'Cash' then Amount end) 
, Check = sum(case when Method = 'Check' then Amount end) 
from yourtable 
group by 
    Type 

Ajouter une ELSE 0 aux instructions CASE le cas échéant.

Cette forme est plus flexible que l'opérateur PIVOT et ne nécessite pas de FULL JOIN. Agrégation juste droite.