我有在它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从未使用该服务,1已用这种服务... 我该怎么做呢?

这将是真棒如果我可以做枢轴(Math.MIN(COUNT(服务ID)为,0)...或者,如果我能做到(CASE(COUNT(服务ID)> 0)THEN ELSE 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