Frage

Ich habe eine komplizierte MS SQL 2005-Abfrage mit einer PIVOT drin ...

Ich habe Daten wie folgt aus:

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

Und was ich brauche, ist dies:

ID [1] [2] [3] [4] [5]
1   0  1   0   0   1
2   1  0   0   0   0
3   0  1   1   0   0

Die SQL Query ich verwende, ist dies:

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

Aber diese SQL-Abfrage nicht tun, was ich will, sondern es tut dies:

ID [1] [2] [3] [4] [5]
1   0  4   0   0   2
2   1  0   0   0   0
3   0  2   1   0   0

Ich brauche alle Daten in den Spalten entweder 0 oder 1, wie in sein, hat 0 nie diesen Service bereits genutzt, 1 diesen Service bereits genutzt hat ... Wie mache ich das?

Es wäre fantastisch, wenn ich Dreh tun könnte (Math.min (COUNT (serviceid), 0) für ... oder wenn ich tun konnte (CASE (COUNT (serviceid)> 0) THEN 1 ELSE 0 für .. . aber es lässt mich nicht.

War es hilfreich?

Lösung

SELECT  *
FROM    (
        SELECT  DISTINCT clients.ClientID, clients.serviceID
        FROM    clients
        ) e 
PIVOT   (
        COUNT(serviceID)
        FOR serviceID in ([1],[2])
        ) p
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top