2017-04-24 148 views
0

我有一個視圖和表。在視圖中,我試圖從表中取出作品集#和相關作品集,然後重新加入視圖以獲取相關作品集#。SQL - 將兩條記錄合併爲一條

我的查詢如下:

SELECT DISTINCT A.FOLIOID 
       ,A.FOLIOTYPE 
       ,A.NAME 
       ,A.FOLIONUMBER 
       ,B.FOLIOID AS SUBFOLIOID 
       ,B.FOLIONUMBER AS SUBFOLIONUMBER 
FROM VW_FOLIO AS A 
INNER JOIN FOLIOREF B ON B.FOLIOPARENTID = A.FOLIOID 
INNER JOIN VW_FOLIO C ON C.FOLIOID=B.FOLIOID 
WHERE A.FOLIONUMBER='2018-01-01' 

它給了我這樣的結果

FOLIOID  FOLIOTYPE NAME   FOLIONUMBER SUBFOLIOID  SUBFOLIO 
ad61e75a5bcc DOORS  JOHN BROWN 2018-01-01  bfdbf0bc9f24 2018-03-01 
ad61e75a5bcc DOORS  JOHN BROWN 2018-01-01  fbf4370a4d46 2018-03-15 

的FOLIOREF表看起來像這樣:

FOLIOREFID  FOLIOID  FOLIOPARENTID 
1c489c11e8dd bfdbf0bc9f24 ad61e75a5bcc 
ece462200c59 fbf4370a4d46 ad61e75a5bcc 

我覺得這個問題是怎麼使第二個SUBFOLIO列在右列而不是創建新行。

希望我很清楚,有人可以幫助我。

****編輯後,以顯示我想要做/獲得以下*****

FOLIOID  FOLIOTYPE NAME   FOLIONUMBER SUBFOLIO1  SUBFOLIO2 
ad61e75a5bcc DOORS  JOHN BROWN 2018-01-01 2018-03-01 2018-03-15 
+2

我覺得* *我可能瞭解你在問什麼;但如果以表格的形式包含所需的結果,那麼它會非常有幫助,就像你已經顯示了你的實際結果一樣 –

+0

讓你更容易幫助你,在你的例子中有更短的id。 – jarlh

+0

http://www.dofactory.com/sql/subquery我認爲這是你正在尋找的 –

回答

0

嘗試以下操作:

SELECT DISTINCT A.FOLIOID 
       ,A.FOLIOTYPE 
       ,A.NAME 
       ,A.FOLIONUMBER 
       ,B.FOLIOID AS SUBFOLIOID 
       ,B.FOLIONUMBER AS SUBFOLIONUMBER 
       ,NVL(D.FOLIOID,'') AS SUBFOLIOID 
       ,NVL(D.FOLIONUMBER,'') AS SUBFOLIONUMBER     
FROM VW_FOLIO AS A 
INNER JOIN FOLIOREF B ON B.FOLIOPARENTID = A.FOLIOID 
INNER JOIN VW_FOLIO C ON C.FOLIOID=B.FOLIOID 
LEFT JOIN FOLIOREF D ON D.FOLIOPARENTID = A.FOLIOID AND D.FOLIOPARENTID <> B.FOLIOPARENTID 
WHERE A.FOLIONUMBER='2018-01-01' 
+0

它告訴我一個NVL不是公認的內置函數名稱。 – sergio089

+0

這取決於你使用的是什麼SQL。 NVL()是Oracle的功能。對於MSSQL使用ISNULL()。函數COALESCE()在我的大多數SQL中都受支持,並且也執行這個技巧。但是這個功能在您的說明中不是必需的。你不需要在你的陳述中使用它 – Barkezy

+0

謝謝你回答Barkezy。我試着按你的建議工作,但我仍然得到兩行記錄。如果我想獲得一個1行。我需要做什麼?我一直在努力修復連接,但沒有運氣。 – sergio089