سؤال

لدي استعلام 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 استخدمت هذه الخدمة ... كيف أفعل هذا؟

سيكون رائعا إذا استطعت أن أفعل pivot (math.min (عدد (ServiceID)، 0) ل ... أو إذا استطعت القيام به (الحالة (ServiceID)> 0) ثم 1 آخر 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