【发布时间】:2018-01-11 11:12:56
【问题描述】:
我有一张桌子,上面有另一所学校的课程,这些课程与我们学校的相应课程相关。这是一对多的关系 我正在尝试根据转校的课程将所有内容排成一行 例如
schoolcode | subj | crsenum | oursubj | ourcrsenum
------------------------------------------------------
1234 | Art | 100 | VisArt | 200
1234 | Art | 100 | VisArt | 201
我想要得到的结果是
schoolcode | subj | crsnum | oursubj1 | ourcrsnum1 | oursubj2 | ourcrsnum2
--------------------------------------------------------------------------------
1234 | Art | 100 | VisArt | 200 | VisArt | 201
我尝试过的每门转校课程仍然给我两条线 在表中,还有一个与添加的每个课程相对应的序列号,该序列号附加到一个传入的课程 任何帮助将不胜感激! 谢谢
对不起... 我在 oracle/sqldeveloper 工作 这是来自一张表的信息,我只是想选择它并将其展平到关键是 schoolcode|subj|crsenum 的一行 然后将我们与该课程相关联的所有课程添加到该行。如果超过 2 个,我想将其添加到同一行 例如,如果学校 1234 主题艺术 crsenum 100 在我们学校还有一门课程绘图 200 - 我希望它给我
1234 | Art | 100 | VisArt | 200 | VisArt | 201 | Drawing | 200
我希望这是有道理的 这是我的第一个问题
【问题讨论】:
-
您使用的是什么 rdbms?如果超过 2 行会怎样?
-
您使用的是什么查询?当你说你得到两行时,
ourcrsnum1和ourcrsnum2是否相同,但交换了值? -
啊,我想我明白你在做什么了,你想把所有匹配的课程都编译成一行吗?例如,
crsenum为 100 的所有课程都有任意数量的oursubj和ourcrsenum列,具体取决于行数? (不知道我的措辞是不是很清楚) -
这是 oursubj 和 ourcrsenum 的一个支点。可以通过多种方式处理 Pivot。但是只有在要创建的列数是静态的情况下,pivot 才有效。如果不意味着要组合的行数可能是“N”,那么您需要动态 SQL 来处理未知数量的列。我会注意到,以这种方式转换数据通常在表示层中做得更好。 DB 的存储、检索和聚合数据;它们真的不是为了让数据看起来更漂亮。
-
您使用的是哪个DBMS?后格雷斯?甲骨文? DB2?火鸟?
标签: sql oracle pivot oracle-sqldeveloper crosstab