एक से अधिक कॉलम लेकिन केवल समूह का चयन कैसे करें?


14

मेरे पास एक समस्या है group by, मैं केवल एक कॉलम द्वारा कई कॉलम का चयन करना चाहता हूं लेकिन समूह। नीचे दी गई क्वेरी वह है जो मैंने कोशिश की थी, लेकिन इसने मुझे एक त्रुटि दी।

SELECT Rls.RoleName,Pro.[FirstName],Pro.[LastName],Count(UR.[RoleId]) as [Count]
from [b.website-sitecore-core].[dbo].[aspnet_UsersInRoles] UR
inner join [b.website-professional-au].[dbo].[Profile]  Pro
on UR.UserId = Pro.Id
inner join [b.website-sitecore-core].[dbo].[aspnet_Roles] Rls
on Rls.RoleId = UR.RoleId
inner join [b.website-professional-au].[dbo].[Gender] Gn
on gn.Id = pro.GenderId
GROUP BY Rls.RoleName;

जवाबों:


19

SQL सर्वर में आप केवल उन कॉलम का चयन कर सकते हैं जो GROUP BYकिसी अन्य कॉलम के क्लॉज या एग्रीगेट फ़ंक्शन का हिस्सा हैं। मैंने यहाँ इसके बारे में विस्तार से ब्लॉग किया है । तो आपके पास दो विकल्प हैं:

  1. GROUP BYक्लॉज में अतिरिक्त कॉलम जोड़ें :

    GROUP BY Rls.RoleName, Pro.[FirstName], Pro.[LastName]
  2. संबंधित स्तंभों पर कुछ समग्र कार्य जोड़ें:

    SELECT Rls.RoleName, MAX(Pro.[FirstName]), MAX(Pro.[LastName])

दूसरा समाधान ज्यादातर वर्कअराउंड और एक संकेत है कि आपको अपनी क्वेरी के साथ कुछ और सामान्य तय करना चाहिए।


"SQL सर्वर में आप केवल उन कॉलम का चयन कर सकते हैं जो ग्रुप BY का हिस्सा हैं, या किसी अन्य कॉलम पर कुल कार्य ..." कुछ ऐसा है जो मैं देख रहा था .. Thnx
Irfan

नोट: ये दो विकल्प बिल्कुल गलत परिणाम प्रदान कर सकते हैं! GROUP BY A,B,Cकी तुलना में आप जो पाना चाहते हैं, उससे पूरी तरह अलग हो सकते हैं GROUP BY A। और भी, आमतौर पर हम संबंधित स्तंभ मान प्राप्त करने के लिए कुछ समुच्चय फ़ंक्शन का उपयोग नहीं कर सकते हैं। जाँच इस जवाब एक समाधान के रूप
S.Serpooshan

2

नोट: यह उत्तर @ लुकास एडर के उत्तर के पूरक के रूप में है

यदि फ़ील्ड SELECTएड के लिए कई मान मौजूद हैं, लेकिन आप जिस फ़ील्ड की इच्छा रखते हैं GROUP BY, आप उसके बजाय एक मिलान ( MAX) के लौटने के लिए प्रतीक्षा करने के बजाय शीर्ष मिलान लाइन को पकड़ सकते हैं।

SELECT i.RoleName, i.*
FROM Rls JOIN 
(SELECT TOP 1 R.Rolename, Pro.FirstName, Pro.LastName FROM Rls as R JOIN Pro ON ... ) as i
     ON i.Rolename=Rls.RoleName

यदि आप सभी मानों को उन अन्य स्तंभों में वापस करना चाहते हैं, लेकिन इसे एक प्रविष्टि में देखना चाहते हैं: https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in -transact-एसक्यूएल /

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.