SQLピボットMIN(COUNT(
-
16-09-2019 - |
質問
私はそれで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 1 ELSE 0のための(素晴らしいだろう。.. 。 しかし、それは私をさせません。
解決
SELECT *
FROM (
SELECT DISTINCT clients.ClientID, clients.serviceID
FROM clients
) e
PIVOT (
COUNT(serviceID)
FOR serviceID in ([1],[2])
) p
所属していません StackOverflow