SQL Pivot MIN (COUNT (
-
16-09-2019 - |
Domanda
Ho un complicato MS SQL query di 2005, con un perno in esso ...
Ho dati in questo modo:
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
E che cosa ho bisogno è questa:
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 query SQL che sto usando è questo:
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
Ma questa query SQL non fare quello che voglio, invece lo fa:
ID [1] [2] [3] [4] [5]
1 0 4 0 0 2
2 1 0 0 0 0
3 0 2 1 0 0
ho bisogno di tutti i dati nelle colonne di essere 0 o 1, come in, 0 non ha mai utilizzato questo servizio, 1 ha utilizzato questo servizio ... Come posso fare questo?
Sarebbe fantastico se potessi fare perno (Math.min (COUNT (ServiceID) per, 0) ... o se potevo fare (CASE (COUNT (ServiceID)> 0) allora 1 altrimenti 0 per .. . ma non me lo permette.
Soluzione
SELECT *
FROM (
SELECT DISTINCT clients.ClientID, clients.serviceID
FROM clients
) e
PIVOT (
COUNT(serviceID)
FOR serviceID in ([1],[2])
) p
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow