एक प्रश्न के साथ आपकी कुछ मदद चाहिए।

मेरे पास एक टेबल है Managers (ManagerId, ManagerName)

मेरे पास एक टेबल है Statuses (StatusId, StatusName)
(उस तालिका में लगभग 10 स्थितियां हैं)

मेरे पास एक टेबल है Clients (ClientId, ClientName, ManagerId, StatusId, WhenAdded)
(WhenAdded एक डेटाटाइम प्रकार है)

यह स्पष्ट है कि फ़ील्ड 'ManagerId' एक तालिका 'Managers' को संदर्भित करता है और फ़ील्ड 'StatusId' एक तालिका 'Statuses' को संदर्भित करता है।

उपयोगकर्ता निम्न तालिका में एक समयावधि (from startDate to endDate using field 'WhenAdded') में प्रबंधकों के बारे में कुछ आंकड़े प्राप्त करना चाहता है।

कॉलम:

ManagerName, NumberOfClients, NumberOfClientsWithStatus1, NumberOfClientsWithStatus2, NumberOfClientsWithStatus3 इत्यादि।

NumberOfClientsWithStatusI नाम वाले स्तंभों की संख्या जहां i, तालिका 'Statuses' में पंक्तियों की संख्या के बराबर कई स्थितियां हैं।

मैं वह कैसे कर सकता हूं?

टी-एसक्यूएल, एसक्यूएल सर्वर 2008 आर 2 एक्सप्रेस संस्करण।

1
alex dee 22 मई 2011, 14:59

1 उत्तर

यदि आप जानते हैं कि statuses तालिका में हमेशा सीमित संख्या में स्थितियां होंगी, तो आप यह कर सकते हैं:

SELECT M.ManagerName,
       COUNT(C.ClientId) NumberOfClients,
       SUM(CASE WHEN S.StatusId= 1 THEN 1 ELSE 0 END) NumberOfClientsWithStatus1,
       SUM(CASE WHEN S.StatusId= 2 THEN 1 ELSE 0 END) NumberOfClientsWithStatus2,
       ...
  FROM Clients C
  JOIN Managers M on M.ManagerId = C.ManagerId
  JOIN Statuses S on S.StatusId = C.StatusId
 WHERE C.WhenAdded BETWEEN startDate AND endDate 
 GROUP BY ManagerName
0
manji 22 मई 2011, 15:12