Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 server 在GroupBy期间,我只需要得到一个结果,但我得到了重复的结果_Sql Server_Sql Server 2008_Sql Server 2012 - Fatal编程技术网

Sql server 在GroupBy期间,我只需要得到一个结果,但我得到了重复的结果

Sql server 在GroupBy期间,我只需要得到一个结果,但我得到了重复的结果,sql-server,sql-server-2008,sql-server-2012,Sql Server,Sql Server 2008,Sql Server 2012,这是一个很容易理解我需要什么的例子 在下面的图片中,我将两个表数据放在一起 在表中,B与表A链接 从表A中,ID-->1在一个主题中失败 ID-->2在所有主题中都是通过的 ID-->3在2主题中失败 所以我需要像这样的精确结果 我使用的查询是 Select A.ID,A.name,case when B.Result='fail' then 'Fail' else 'Pass' End from tableA A inner join TableB B ON B.id=A.Aid 通过

这是一个很容易理解我需要什么的例子 在下面的图片中,我将两个表数据放在一起

在表中,B与表A链接

从表A中,ID-->1在一个主题中失败

ID-->2在所有主题中都是通过的

ID-->3在2主题中失败

所以我需要像这样的精确结果

我使用的查询是

Select A.ID,A.name,case when B.Result='fail' then 'Fail' else 'Pass' End  from tableA A 
inner join
TableB B ON B.id=A.Aid

通过使用此名称,名称为get repeating,但是我只需要一个名字和一个结果

你想要的是在每个学生的结果中得到最差的结果(“失败”如果有一个“失败”,“通过”否则)。您可以使用
groupby
min
作为分组功能

Select  A.ID, A.Name, min(B.Result)
from    TableA A 
join    TableB B
on      A.ID = B.Aid
group by A.ID, A.Name

这是因为按照字母顺序,你想要的是在每个学生的成绩中得到最差的结果(“失败”如果有一个“失败”,“通过”否则)。您可以使用
groupby
min
作为分组功能

Select  A.ID, A.Name, min(B.Result)
from    TableA A 
join    TableB B
on      A.ID = B.Aid
group by A.ID, A.Name
这是因为按照字母顺序“失败”和“通过”

从以下链接

从以下链接 根据我的理解

create table #temp(id int, name varchar(1))
insert into #temp values(1,'p')
,(1,'p')
,(1,'f')
,(2,'p')
,(2,'p')
,(2,'p')
,(3,'p')
,(3,'f')
,(3,'f')

select id, min(name) from #temp group by id, name

with cte as (
select id, name, ROW_NUMBER() over(partition by id order by name) rn from #temp group by id, name
) select id, name, rn from cte where rn = 1
据我了解,

create table #temp(id int, name varchar(1))
insert into #temp values(1,'p')
,(1,'p')
,(1,'f')
,(2,'p')
,(2,'p')
,(2,'p')
,(3,'p')
,(3,'f')
,(3,'f')

select id, min(name) from #temp group by id, name

with cte as (
select id, name, ROW_NUMBER() over(partition by id order by name) rn from #temp group by id, name
) select id, name, rn from cte where rn = 1

我看不到这两个表之间的联系,至少不能解释重复项的问题。我看不到这两个表之间的联系,至少不能解释重复项的问题。谢谢你的结果,但我怎么能取min,如果是3,如果是4,5,6,我们怎么能取。(相等通过和相等失败可以知道3通过3失败)如何克服
min(B.Result)
将在每个
A.ID,A.Name
组合的所有结果中获得最小的结果,因此如果他们是3或4,没有任何区别。例如,如果他们有6个科目3纸通过和3个paer失败。那么将采取什么措施(通过或失败)
min(“pass”、“pass”、“pass”、“fail”、“fail”、“fail”)=“fail”
。唯一的“pass”方法是当所有结果都是“pass”时,如果它是0和1,即0代表fail,1代表paass,那么min操作符将不起作用。谢谢你的结果,但是我如何取min,如果它是3主题ok,如果它是4或5或6,我们如何取。(相等通过和相等失败可以知道3通过3失败)如何克服
min(B.Result)
将在每个
A.ID,A.Name
组合的所有结果中获得最小的结果,因此如果他们是3或4,没有任何区别。例如,如果他们有6个科目3纸通过和3个paer失败。那么将采取什么措施(通过或失败)
min(“通过”、“通过”、“通过”、“失败”、“失败”)=“失败”
。当所有结果都是“通过”时,它可以是“通过”的唯一方法。如果它是0和1,即0表示失败,1表示paass,则min运算符将不工作
create table #temp(id int, name varchar(1))
insert into #temp values(1,'p')
,(1,'p')
,(1,'f')
,(2,'p')
,(2,'p')
,(2,'p')
,(3,'p')
,(3,'f')
,(3,'f')

select id, min(name) from #temp group by id, name

with cte as (
select id, name, ROW_NUMBER() over(partition by id order by name) rn from #temp group by id, name
) select id, name, rn from cte where rn = 1