Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我不能在此查询中使用分组依据_Sql_Sql Server 2008_Group By - Fatal编程技术网

Sql 为什么我不能在此查询中使用分组依据

Sql 为什么我不能在此查询中使用分组依据,sql,sql-server-2008,group-by,Sql,Sql Server 2008,Group By,当我在MS SQL Management Studio中执行以下查询时,它产生了一个错误 查询: select u.UserName, r.RoleName from User u join UserRole ur on ur.UserId = u.UserId join Role r on r.RoleId = ur.RoleId group by r.RoleName 错误: select u.UserName, r.RoleName from User u join UserRole

当我在MS SQL Management Studio中执行以下查询时,它产生了一个错误

查询:

select  u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId
group by r.RoleName
错误:

select  u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId
group by r.RoleName
Msg 8120,第16级,状态1,第2行“User.UserName”列无效 在选择列表中,因为它不包含在任何聚合中 函数或GROUPBY子句

我使用sql已经有一段时间了,我想这是一些基本的命令。但我还是不明白原因

注:

如果我使用

按r.RoleName、u.UserName分组

该语句与聚合函数一起使用,以按一列或多列对结果集进行分组

select  u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId
group by u.UserName,r.RoleName
group by用于聚合函数或过滤重复项。在sql server中,group by需要select中除聚合函数以外的所有列

对于mysql,下面的查询不会抛出错误。它将为GROUPBY子句中的每个项目选择第一行

select  u.UserName, r.RoleName
    from User u
    join UserRole ur on ur.UserId = u.UserId
    join Role r on r.RoleId = ur.RoleId
    group by r.RoleName
该语句与聚合函数一起使用,以按一列或多列对结果集进行分组

select  u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId
group by u.UserName,r.RoleName
group by用于聚合函数或过滤重复项。在sql server中,group by需要select中除聚合函数以外的所有列

对于mysql,下面的查询不会抛出错误。它将为GROUPBY子句中的每个项目选择第一行

select  u.UserName, r.RoleName
    from User u
    join UserRole ur on ur.UserId = u.UserId
    join Role r on r.RoleId = ur.RoleId
    group by r.RoleName

这演示了
单值规则
,该规则禁止在运行
分组依据
查询时获得未定义的结果,并且在选择列表中包含既不属于分组条件的任何列,也不出现在聚合函数
(总和、最小值、最大值等)
。希望你能理解

我不知道,但也许你想要这个

select distinct u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId

这演示了
单值规则
,该规则禁止在运行
分组依据
查询时获得未定义的结果,并且在选择列表中包含既不属于分组条件的任何列,也不出现在聚合函数
(总和、最小值、最大值等)
。希望你能理解

我不知道,但也许你想要这个

select distinct u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId

你想得到什么结果?如果您
按角色名称分组
,则每个角色将获得一行-并且一个角色可能包含多个用户-因此使用它选择
用户名
是无效的。您试图获得的结果是什么?如果您
按角色名称分组
,则每个角色将得到一行-一个角色可能包含多个用户-因此选择
用户名
无效。@PraveenPrasannan我在问题中已经提供了这一点。我不是在寻找解决方案。我的第一个查询不起作用的原因是我需要的。在sql server中,group by需要select中的所有列,而不是聚合函数。关于这个@PraveenPrasannan,我能得到一些参考吗?@PraveenPrasannan我已经在我的问题中提供了这个。我不是在寻找解决方案。我的第一个查询不起作用的原因是我需要的。在sql server中,group by需要select中的所有列,而不是聚合函数。关于这个@PraveenPrasannan,我能得到一些参考资料吗?