group by
に問題があります。複数の列を選択したいのですが、1つの列だけでグループ化したいのですが。以下のクエリは私が試したものですが、エラーが発生しました。
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;
SQL Serverでは、GROUP BY
句の一部である列、または他の列の集計関数のみを選択できます。 これについては、こちらで詳しくブログしています 。したがって、2つのオプションがあります。
GROUP BY
句に列を追加します。
GROUP BY Rls.RoleName, Pro.[FirstName], Pro.[LastName]
関連する列に集計関数を追加します。
SELECT Rls.RoleName, MAX(Pro.[FirstName]), MAX(Pro.[LastName])
2番目の解決策は主に回避策であり、クエリでより一般的なものを修正する必要があることを示しています。
注:この回答は @ Lukas Ederの回答を補足するものです。
フィールドSELECT
edに複数の値が存在するが、必要なフィールド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 /