একাধিক কলাম কিন্তু কেবল একটি করে গ্রুপ কীভাবে নির্বাচন করবেন?


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

এসকিউএল সার্ভারে আপনি কেবলমাত্র কলাম নির্বাচন করতে পারেন যা GROUP BYধারাটির অংশ , বা অন্য কোনও কলামের সামগ্রিক ফাংশন। আমি এখানে এই সম্পর্কে বিস্তারিত ব্লগ করেছি । সুতরাং আপনার কাছে দুটি বিকল্প রয়েছে:

  1. ধারাটিতে অতিরিক্ত কলাম যুক্ত করুন GROUP BY:

    GROUP BY Rls.RoleName, Pro.[FirstName], Pro.[LastName]
  2. সম্পর্কিত কলামগুলিতে কিছু সামগ্রিক ফাংশন যুক্ত করুন:

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

দ্বিতীয় সমাধানটি বেশিরভাগই একগুঁয়েমি এবং একটি ইঙ্গিত যা আপনার প্রশ্নের সাথে আরও সাধারণ কিছু ঠিক করা উচিত।


"এসকিউএল সার্ভারে আপনি কেবলমাত্র কলামগুলি বেছে নিতে পারেন যা গ্রুপের অধীনে থাকা গ্রুপের অংশ বা অন্য কলামগুলির মধ্যে সামগ্রিক ফাংশন ..." আমি যা খুঁজছিলাম তা হল .. Thnx
ইরফান

দ্রষ্টব্য: এই দুটি অপশন একেবারে ভুল ফলাফল প্রদান করতে পারে! GROUP BY A,B,Cআপনি যা তুলনা করতে চান তার চেয়ে সম্পূর্ণ আলাদা হতে পারে GROUP BY A। এবং এছাড়াও, সাধারণত আমরা সম্পর্কিত কলাম মান পেতে কিছু সামগ্রিক ফাংশন ব্যবহার করতে পারি না। সমাধান হিসাবে এই উত্তরটি যাচাই করুন
এস.স্পার্পোশন

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/concateating-row-values-in -transact-SQL /

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.