iT邦幫忙

1

遞迴階層與另外資料表JOIN與法問題in mssql

  • 分享至 

  • xImage

請教大家
透過下列的遞迴語法,來抓出樹狀階層結構內容
http://ithelp.ithome.com.tw/upload/images/20161001/20003705qnP9pEJ6vo.jpg

要如何跟另外一個資料表之Title JOIN產生合併在一塊的結果呢?讓其知道每一層的瀏覽數量
http://ithelp.ithome.com.tw/upload/images/20161001/20003705G8BjnNes8O.jpg

感謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
做工仔人!
iT邦大師 1 級 ‧ 2016-10-01 20:39:12

看到3個欄位名稱: TITLE , PARENTID , CONTENTID .
假設:PARENTID : 是主件料號嗎(1) ? CONTENTID :是組成件料號(多)
TITLE_P : 主件品名 , TITLE_C : 組成件品名

SELECT C1.TITLE_P 主件, C1.TITLE_C 第一層組成件, C2.TITLE_C 第二層組成件,C3.TITLE_C  第三層組成件,C4.TITLE 第四層組成件  
FROM  CONTENT C1   
     LEFT JOIN CONTENT C2 ON C1.CONTENTID = C2.PARENTID    
     LEFT JOIN CONTENT C3 ON C2.CONTENTID = C3.PARENTID    
     LEFT JOIN CONTENT C4 ON C3.CONTENTID = C4.PARENTID    
 WHERE C1.PARENTID='43941959'  
看更多先前的回應...收起先前的回應...
ektrontek iT邦研究生 1 級 ‧ 2016-10-01 21:31:54 檢舉

感謝 那如何對應JOIN到另外一個資料表的ID欄位,抓出其瀏覽率呢?

SELECT  C1.TITLE_P , CNT.COUNT 
from  CONTENT C1 
    LEFT JOIN COUNT CNT ON C1.TITLE_C = CNT.TITLE
ektrontek iT邦研究生 1 級 ‧ 2016-10-02 15:36:16 檢舉

感謝
我是用下列的方式來抓取每個階層的總和,然後手動把每個階層纍加起來算出這個TREE下的所有PAGE瀏覽率,有沒有可以用SQL一次來抓取出來的方式呢?
http://ithelp.ithome.com.tw/upload/images/20161002/20003705Ucxhjpo7Ig.jpg

說真的, 我有點搞不懂: 您要的結果是什麼?
要不要將"希望的結果"格式放上來 ?

ektrontek iT邦研究生 1 級 ‧ 2016-10-03 12:37:04 檢舉

我可以用語法個別抓出下列的資訊,但如果想把它合併在一個SQL來抓出並算出它的總和,是否有辦法呢?謝謝
http://ithelp.ithome.com.tw/upload/images/20161003/20003705KH9oE2xJHq.jpg

是什麼資料的總和?
每一層的總合分別列出 還是三層合計的總合SHOW 只一列?
基本上 您應該會先有一個產出的報表格式. SQL 語法撈出來的結果會表是個EXCEL 的表格.而且是只有第一列的抬頭的格式.
如果有這個表格樣本(用EXCEL 做都可以) ,再給TABLE 的欄位資訊.才組得出語法.
也有可能:表格畫好後,自己就會發現問題及解法.

ektrontek iT邦研究生 1 級 ‧ 2016-10-03 18:51:42 檢舉

類似此篇資訊:http://ithelp.ithome.com.tw/questions/10184060
我已將每個階層所對應的瀏覽率匯入到另外的資料表,是否可以用SQL抓出整個TREE的總和

SELECT C1.TITLE_P 主件, C1.TITLE_C 第一層組成件, C2.TITLE_C 第二層組成件,C3.TITLE_C  第三層組成件,C4.TITLE 第四層組成件,CNT2.COUNT 第二層COUNT數,  CNT3.COUNT 第三層COUNT數,CNT4.COUNT 第四層COUNT數    
FROM  CONTENT C1   
     LEFT JOIN CONTENT C2 ON C1.CONTENTID = C2.PARENTID  
     LEFT JOIN COUNT2 CNT2 ON C2.TITLE_C = CNT2.TITLE  
     LEFT JOIN CONTENT C3 ON C2.CONTENTID = C3.PARENTID   
     LEFT JOIN COUNT2 CNT3 ON C3.TITLE_C = CNT3.TITLE 
     LEFT JOIN CONTENT C4 ON C3.CONTENTID = C4.PARENTID    
     LEFT JOIN COUNT2 CNT4 ON C4.TITLE_C = CNT4.TITLE 
 WHERE C1.PARENTID='43941959'
ektrontek iT邦研究生 1 級 ‧ 2016-10-14 14:09:44 檢舉

另外請教
如果有另外一個資料表:LIKES,但其欄位結構與COUNT2類似,但它沒有數值的資訊,而只有一個CONTENTID欄位,是否可以運用上次遞迴語法的應用,來算出在每個階層中的CONTENTID的數量呢?目前的語法如下:

select c1.TITLE,c2.TITLE,c3.TITLE,c4.TITLE ,CNT2.CONTENTID 第二層COUNT數,  CNT3.CONTENTID 第三層COUNT數,CNT4.CONTENTID 第四層COUNT數
from CONTENT c1
left outer join CONTENT c2
on c2.PARENTID = c1.CONTENTID
LEFT JOIN LIKES CNT2 ON c2.CONTENTID = CNT2.CONTENTID
left outer join CONTENT c3
on c3.PARENTID = c2.CONTENTID
LEFT JOIN LIKES CNT3 ON c3.CONTENTID = CNT3.CONTENTID
left outer join CONTENT c4
on c4.PARENTID = c3.CONTENTID
LEFT JOIN LIKES CNT4 ON c2.CONTENTID = CNT2.CONTENTID
where c1.PARENTID='43941955'

其結果如下
http://ithelp.ithome.com.tw/upload/images/20161014/20003705Wr21kHOQ77.jpg

感謝

應該可以,只要將JOIN 的欄位資訊要一致就可以了 !

我要發表回答

立即登入回答