2017-08-03 90 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