2009-09-24 5 views
3

У меня есть сложный MS SQL 2005 запрос с PIVOT в нем ...SQL Pivot MIN (COUNT (

У меня есть данные, как это:

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 

И что мне нужно это:

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

SQL-запроса Я использую это:

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 

Но это SQL-запрос не делать то, что я хочу, вместо этого он делает это:

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

Мне нужно все данные в столбцах быть либо 0 или 1, как, 0 никогда не использовал эту услугу , 1 использовал эту услугу ... Как это сделать?

Было бы здорово, если бы я мог сделать поворот (Math.MIN (COUNT (serviceID), 0) для ... или если бы я мог сделать (CASE (COUNT (serviceID)> 0) THEN 1 ELSE 0 для. .. , но это не позволит мне.

ответ

2
SELECT * 
FROM (
     SELECT DISTINCT clients.ClientID, clients.serviceID 
     FROM clients 
     ) e 
PIVOT (
     COUNT(serviceID) 
     FOR serviceID in ([1],[2]) 
     ) p 
+0

haha, thanks, perfect, so simple. –