2017-08-03 92 views
0

我有一张桌子,上面有来自另一所学校的课程,与我们学校的相应课程相关。这是一个一对多的关系,船舶 我试图排队它所有的基础上,转移学校的课程 例如一行将多行组合成1

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 

我希望是有道理的 这是我的第一个问题永远

+1

正在使用的是何种RDBMS?如果你有两条以上的线会发生什么? –

+0

你使用什么查询?当你说你得到两行时,'ourcrsnum1'和'ourcrsnum2'是否相同,但是值已交换? – TallChuck

+0

啊,我想我明白你在做什么,你想把所有匹配的课程编译成一行吗?例如,根据行数的不同,“crsenum”为100的所有课程都有任意数量的“oursubj”和“ourcrsenum”列? (我不知道我的措辞是否非常清楚) – TallChuck

回答

0
DECLARE @sql VARCHAR(MAX) 
DECLARE @tbl VARCHAR(100) 

SET @tbl = 'courses' -- put your table name here 

SET @sql = 'SELECT schoolcode, subj, crsenum, ' 

SELECT @sql = @sql + ''''+ oursubj + '''' + ' AS oursubj' + CAST(ROW_NUMBER() OVER (ORDER BY ourcrsenum) AS VARCHAR) + ', ' + CAST(ourcrsenum AS VARCHAR) + ' AS crsenum' + CAST(ROW_NUMBER() OVER (ORDER BY ourcrsenum) AS VARCHAR) + ', ' 
    FROM courses 

SET @sql = LEFT(@sql, LEN(@sql) - 1) 

SET @sql = @sql + ' FROM ' + @tbl + ' GROUP BY schoolcode, subj, crsenum' 

EXEC(@sql) 

结果

schoolcode | subj | crsenum | oursubj1 | crsenum1 | oursubj2 | crsenum2 
1234  | Art | 100  | VisArt | 200  | VisArt | 201