如何使用行号将多条记录合并为一条?

Posted

技术标签:

【中文标题】如何使用行号将多条记录合并为一条?【英文标题】:How to get multiple records combined to one using row number? 【发布时间】:2017-09-19 17:22:47 【问题描述】:

如何让多个警报记录(每个学生最多 10 个)显示在每个学生的一条记录上?我正在尝试使用行号对记录进行编号,然后将它们放在输出中,但是由于交叉应用语句中“where”参数的语法错误不正确,我编写的代码不起作用。我尝试了多种方法来完成我所需要的,但无法克服错误。请帮忙。

select 
sd.[student_number],
a.[health_alert],
a.[comments],
b.[health_alert],
b.[comments]

from student_enrollmentcube as se,
   student_demographicscube as sd

cross apply (select  a.[health_alert], a.[comments], (select row_number() 
 over (partition by a.[student_id] order by a.[student_id]) as r1 from 
   ar_student_health_alerts) a)  where a.[student_id] = sd.[student_id] and 
    r1 = 1)
cross apply (select  b.[health_alert], b.[comments], (select row_number() 
 over (partition by b.[student_id] order by b.[student_id]) as r2 from 
  ar_student_health_alerts) b)  where b.[student_id] = sd.[student_id] and 
   r2 = 2)

where se.student_id = sd.student_id and
     se.enrollment_status= 'active' and
     se.[current_academic_year] = 'y'

【问题讨论】:

这与 SQL 有关吗?如果是这样,请适当地标记。 请同时包含准确的错误信息 【参考方案1】:

您的语法存在多个问题,包括嵌入在其他不完整选择语句中的不完整选择语句,甚至是表别名与文字值的比较。

我建议你把它分成几块。您的交叉应用语句需要能够独立运行,但对外部表的引用除外。

换句话说,让这个工作:

(select  a.[health_alert], a.[comments], (select row_number() 
 over (partition by a.[student_id] order by a.[student_id]) as r1 from 
   ar_student_health_alerts) a)  where a.[student_id] = sd.[student_id] and 
    r1 = 1)

在您尝试在交叉应用中使用它之前。

【讨论】:

以上是关于如何使用行号将多条记录合并为一条?的主要内容,如果未能解决你的问题,请参考以下文章

sql带条件多条数据合并为一条数据并换行

sql内多条数据合并为一条

根据第一个字节将多条记录合并为一行

如何在Oracle 10g中根据指定列将n条记录合并为一条记录? [复制]

oracle 如何返回多条记录

PostgreSQL 查询把多条记录合并一条