SQL Pivot MIN (COUNT (
-
16-09-2019 - |
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.
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