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.

È stato utile?

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