วิธีการเลือกหลายคอลัมน์ แต่จัดกลุ่มตามกลุ่มเดียว?


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 Server คุณสามารถเลือกคอลัมน์ที่เป็นส่วนหนึ่งของส่วนGROUP BYคำสั่งหรือฟังก์ชั่นรวมในคอลัมน์อื่น ๆ ฉันได้ blogged เกี่ยวกับเรื่องนี้ในรายละเอียดที่นี่ ดังนั้นคุณมีสองทางเลือก:

  1. เพิ่มคอลัมน์เพิ่มเติมในGROUP BYข้อ:

    GROUP BY Rls.RoleName, Pro.[FirstName], Pro.[LastName]
  2. เพิ่มฟังก์ชั่นรวมบางส่วนในคอลัมน์ที่เกี่ยวข้อง:

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

โซลูชันที่สองส่วนใหญ่เป็นวิธีแก้ไขปัญหาและตัวบ่งชี้ว่าคุณควรแก้ไขบางสิ่งที่มีความเป็นทั่วไปมากขึ้นกับแบบสอบถามของคุณ


"ใน SQL Server คุณสามารถเลือกคอลัมน์ที่เป็นส่วนหนึ่งของกลุ่มตามข้อหรือฟังก์ชั่นรวมในคอลัมน์อื่น ๆ ... "เป็นสิ่งที่ฉันกำลังมองหา .. Thnx
Irfan

หมายเหตุ: สองตัวเลือกเหล่านี้สามารถให้ผลลัพธ์ที่ผิดอย่างแน่นอน! สามารถที่แตกต่างกว่าสิ่งที่คุณต้องการที่จะได้รับในการเปรียบเทียบกับGROUP BY A,B,C GROUP BY Aและโดยปกติแล้วเราไม่สามารถใช้ฟังก์ชันการรวมเพื่อรับค่าคอลัมน์ที่เกี่ยวข้อง ตรวจสอบคำตอบนี้เป็นวิธีแก้ปัญหา
S.Serpooshan

2

หมายเหตุ: คำตอบนี้มีจุดประสงค์เพื่อเป็นส่วนเสริมของคำตอบของ @Lukas Eder

หากมีหลายค่าสำหรับเขตข้อมูลSELECTed แต่เป็นเขตข้อมูลที่คุณต้องการ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-SQL /

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.