एक प्रश्न के साथ आपकी कुछ मदद चाहिए।
मेरे पास एक टेबल है 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 उत्तर
यदि आप जानते हैं कि 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
संबंधित सवाल
नए सवाल
tsql
T-SQL (Transact Structured Query Language) Sybase ASE और Microsoft SQL सर्वर द्वारा समर्थित SQL कार्यक्षमता का विस्तार है। MySQL, PostgreSql, Oracle (Pl / SQL) संबंधित प्रश्नों के लिए इस टैग का उपयोग न करें। कृपया ध्यान दें कि LINQ का उपयोग करके लिखा जा रहा SQL कोड भी इस टैग का हिस्सा नहीं होगा। यह टैग विशेष रूप से Microsoft SQL सर्वर का उपयोग कर उन्नत SQL प्रोग्रामिंग के लिए बनाया गया है।