Вопрос

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

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

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 пользовался этим сервисом...Как мне это сделать?

Было бы здорово, если бы я мог сделать pivot (Math.MIN ( COUNT(serviceId), 0 ) для ...или , если бы я мог сделать ( CASE (COUNT(serviceId) > 0 ) , ТО 1 ЕЩЕ 0 для ...но это мне не позволит.

Это было полезно?

Решение

SELECT  *
FROM    (
        SELECT  DISTINCT clients.ClientID, clients.serviceID
        FROM    clients
        ) e 
PIVOT   (
        COUNT(serviceID)
        FOR serviceID in ([1],[2])
        ) p
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top