質問

私はそれで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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top