SQL Pivot MIN (COUNT (
-
16-09-2019 - |
Pergunta
Eu tenho uma consulta complicado MS SQL 2005 com um PIVOT nela ...
Eu tenho dados como este:
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 o que eu preciso é o seguinte:
ID [1] [2] [3] [4] [5]
1 0 1 0 0 1
2 1 0 0 0 0
3 0 1 1 0 0
A consulta SQL que estou usando é o seguinte:
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
Mas esta consulta SQL não faz o que eu quero, em vez disso, faz isso:
ID [1] [2] [3] [4] [5]
1 0 4 0 0 2
2 1 0 0 0 0
3 0 2 1 0 0
Eu preciso de todos os dados nas colunas para ser 0 ou 1, como em, 0 nunca usou este serviço, 1 usou este serviço ... Como posso fazer isso?
Seria fantástico se eu poderia fazer pivot (Math.min (COUNT (serviceId), 0) para ... ou se eu poderia fazer (CASE (COUNT (serviceId)> 0) THEN 1 ELSE 0 para .. . mas não vai me deixar.
Solução
SELECT *
FROM (
SELECT DISTINCT clients.ClientID, clients.serviceID
FROM clients
) e
PIVOT (
COUNT(serviceID)
FOR serviceID in ([1],[2])
) p
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow