SQL 피벗 Min (count)
-
16-09-2019 - |
문제
나는 pivot이있는 복잡한 MS SQL 2005 쿼리를 가지고 있습니다 ...
다음과 같은 데이터가 있습니다.
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에서 0 은이 서비스를 사용한 적이 없으며 1은이 서비스를 사용했습니다 ... 어떻게해야합니까?
피벗 (Math.min (count (service), 0)를 위해 ... 또는 내가 할 수 있다면 (case (count (count (service)> 0) 그런 다음 1 else 0에 대해 ...하지만 ... 그러나 It를 할 수 있다면 굉장 할 것입니다. 나를 허락하지 않을 것입니다.
해결책
SELECT *
FROM (
SELECT DISTINCT clients.ClientID, clients.serviceID
FROM clients
) e
PIVOT (
COUNT(serviceID)
FOR serviceID in ([1],[2])
) p
제휴하지 않습니다 StackOverflow