SQL Pivot MIN ( КОЛИЧЕСТВО (
-
16-09-2019 - |
Вопрос
У меня есть сложный запрос 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
Не связан с StackOverflow