Question

J'ai un complexe MS SQL requête 2005 avec une PIVOT en elle ...

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 je dois 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, au lieu de cela 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 puis-je faire?

Il serait génial si je pouvais faire pivoter (Math.Min (COUNT (ServiceId), 0) pour ... ou si je pouvais faire (CASE (COUNT (ServiceId)> 0) 1 ALORS SINON 0 pour .. . mais il ne me laisse pas.

Était-ce utile?

La solution

SELECT  *
FROM    (
        SELECT  DISTINCT clients.ClientID, clients.serviceID
        FROM    clients
        ) e 
PIVOT   (
        COUNT(serviceID)
        FOR serviceID in ([1],[2])
        ) p
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top