SQL Pivot Min (عدد (
-
16-09-2019 - |
سؤال
لدي استعلام 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
لا تنتمي إلى StackOverflow