2009-09-24 4 views
3

J'ai un complexe MS SQL requête 2005 avec un PIVOT en elle ...SQL Pivot MIN (COUNT (

J'ai données comme ceci:

Data (clients left join visits): 
ClientID VisitID ServiceID 
1  34  5 
1  36  2 
1  36  5 
1  45  2 
1  48  2 
1  60  2 
2  44  1 
3  48  2 
3  78  3 
3  79  2 

Et ce que j'ai besoin est ceci:

ID [1] [2] [3] [4] [5] 
1 0 1 0 0 1 
2 1 0 0 0 0 
3 0 1 1 0 0 

La requête SQL J'utilise est le suivant:

select * from 
     (select clients.ClientID, clients.serviceID FROM clients left join visits on visit.cliendid=clients.clientid) e 
     pivot (COUNT(serviceID) for serviceID in ([1],[2],...,[54])) p 

Mais cette requête SQL ne fait pas ce que je veux, à la place il le fait:

ID [1] [2] [3] [4] [5] 
1 0 4 0 0 2 
2 1 0 0 0 0 
3 0 2 1 0 0 

J'ai besoin de toutes les données dans les colonnes être 0 ou 1, comme, 0 n'a jamais utilisé ce service , 1 a utilisé ce service ... Comment est-ce que je fais?

Ce serait génial si je pouvais faire pivoter (Math.MIN (COUNT (serviceID), 0) pour ... ou si je pouvais le faire (CASE (COUNT (serviceID)> 0) THEN 1 ELSE 0 pour. .. mais il ne me laisse pas

Répondre

2
SELECT * 
FROM (
     SELECT DISTINCT clients.ClientID, clients.serviceID 
     FROM clients 
     ) e 
PIVOT (
     COUNT(serviceID) 
     FOR serviceID in ([1],[2]) 
     ) p 
+0

haha, merci, parfait, si simple. –