SQL pivote MIN (COUNT (
-
16-09-2019 - |
Pregunta
Tengo una complicada consulta MS SQL 2005 con un pivote en ella ...
Tengo datos como estos:
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
Y lo que necesito es la siguiente:
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 consulta SQL que estoy usando es el siguiente:
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
Pero esta consulta SQL no hace lo que yo quiero, sino que hace esto:
ID [1] [2] [3] [4] [5]
1 0 4 0 0 2
2 1 0 0 0 0
3 0 2 1 0 0
Necesito todos los datos de las columnas a ser 0 o 1, como en, 0 nunca ha utilizado este servicio, 1 ha utilizado este servicio ... ¿Cómo puedo hacer esto?
Sería increíble si pudiera hacerlo de pivote (Math.min (COUNT (ServiceId), 0) para ... o si pudiera hacerlo (CASE (COUNT (ServiceId)> 0) then 1 else 0 para .. . pero no me lo permite.
Solución
SELECT *
FROM (
SELECT DISTINCT clients.ClientID, clients.serviceID
FROM clients
) e
PIVOT (
COUNT(serviceID)
FOR serviceID in ([1],[2])
) p
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow