-1

我正在为一个供应商编写一条 SQL 语句,该供应商的产品导入功能要求每个参与特殊项目的学生有单独的数据行。例如:

Student ID    Program Name
12345         Special Education
12345         Title 1
12345         Limited English
67891         Special Education
67891         Gifted and Talented

我不确定如何编写查询语句,以便为每个学生提供他们所涉及的每个程序的单独数据行,而不是包含多列的单行数据。谁能让我指出正确的方向?

我的表结构如下

表:学生相关栏目:

    student_number     FLOAT(126) 
    last_name          VARCHAR2(50 CHAR)
    first_name         VARCHAR2(50 CHAR)
    iep                NUMBER(10) 
    ellstatus          NUMBER(10) 
    gifted             NUMBER(10) 
    title1             NUMBER(10) 

    (plus hundreds of other non-relevant fields)

谢谢你。

4

2 回答 2

0

在没有看到表结构的情况下,我猜您将学生信息和课程信息放在单独的表中。所以你会做这样的事情:

SELECT s.StudentId, p.ProgramName
FROM students s
INNER JOIN programs p
   ON s.studentid = p.studentid
于 2012-09-10T20:21:50.470 回答
0

我猜您在每个不同的列中都有程序信息(iep、ellstatus、gifted、title1)。如果是这种情况;那么它就不是一个规范化的数据库,以后可能会给你带来一些麻烦。

由于我不确切知道如何将 iep、title1、gifted、ellstatus 的数值映射到程序中,因此我将为您提供一种选择数字的方法,为每个学生/字段关系提供一行。您可以将格式添加到查询中以按预期显示程序名称。

这是使用联合运算符。该运算符将两个不同查询的结果集结合起来。如果你不使用union all,那么重复的行将只显示一次。我添加了所有,因为我猜这些数字可能会重复。

select student_id, program from (
  select student_id, iep program from students where iep is not null
   union all
  select student_id, title1 program from students where title1 is not null
   union all
  select student_id, gifted program from students where gifted is not null
   union all
  select student_id, ellstatus program from students where ellstatus is not null
);

要阅读有关联合运算符的更多信息,您可以访问此处:http ://docs.oracle.com/cd/B28359_01/server.111/b28286/queries004.htm

于 2012-09-10T21:01:18.373 回答