3

我有一个复杂的 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 ) THEN 1 ELSE 0 for ... 但是它会很棒不让我。

4

1 回答 1

2
SELECT  *
FROM    (
        SELECT  DISTINCT clients.ClientID, clients.serviceID
        FROM    clients
        ) e 
PIVOT   (
        COUNT(serviceID)
        FOR serviceID in ([1],[2])
        ) p
于 2009-09-24T20:25:19.920 回答