【发布时间】:2009-09-24 20:20:00
【问题描述】:
我有一个复杂的 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 已使用过此服务... 我该怎么做?
如果我能做支点(Math.MIN(COUNT(serviceID), 0) for ... 或者如果我能做(CASE (COUNT(serviceID) > 0) THEN 1 ELSE 0 for ..),那就太棒了。 . 但它不会让我。
【问题讨论】:
标签: sql-server pivot aggregators