我有一张桌子,上面有另一所学校的课程,这些课程与我们学校的相应课程相关。它是一对多的关系 我试图根据转学校的课程在一条线上排队 例如
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 subj Art crsenum 100,我们学校还有一个200线的课程 - 我希望它能给我
1234 | Art | 100 | VisArt | 200 | VisArt | 201 | Drawing | 200
我希望这是有道理的 这是我的第一个问题
答案 0 :(得分: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