문제

나는 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top