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.

Foi útil?

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
scroll top