여러 열을 선택하고 하나만 그룹화하는 방법은 무엇입니까?


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절의 일부인 열만 선택 하거나 다른 열에서 함수를 집계 할 수 있습니다. 나는 이것에 대해 자세히 블로그에 올렸다 . 따라서 두 가지 옵션이 있습니다.

  1. GROUP BY절에 추가 열을 추가하십시오 .

    GROUP BY Rls.RoleName, Pro.[FirstName], Pro.[LastName]
  2. 관련 열에 집계 함수를 추가하십시오.

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

두 번째 솔루션은 대부분 해결 방법이며 쿼리에서보다 일반적인 것을 수정해야한다는 표시입니다.


"SQL Server에서는 GROUP BY 절의 일부인 열만 선택하거나 다른 열의 함수를 집계 할 수 있습니다 ..." 는 내가 찾던 것입니다 .. 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.