2009-09-24 83 views
3

我有在它PIVOT一個複雜的MS SQL 2005查詢...SQL樞軸MIN(COUNT(

我的數據是這樣的:

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。如果我可以做數據透視(Math.MIN(COUNT(serviceID),0) .. 但它不會讓我。

回答

2
SELECT * 
FROM (
     SELECT DISTINCT clients.ClientID, clients.serviceID 
     FROM clients 
     ) e 
PIVOT (
     COUNT(serviceID) 
     FOR serviceID in ([1],[2]) 
     ) p 
+0

哈哈,謝謝,完美,如此簡單。 – 2009-09-24 20:34:29