2010-12-17 17 views
0

我有一個函數返回一個表像SQL查詢以下內容:幫忙寫一個SQL查詢來加入一個表上本身

id emp_name total_explabor_grade title  name 
518 Name,One 3 PE4 Software Engineer Java 
492 Name,Two 4 PE1 Software Engineer Java 
502 Name,Three 1 SPE5 Principal  Javascript 
410 Name,Four 3 ENG3 Software Engineer Java 
147 Name,Five 5 SPE5 Director  Java 
147 Name,Five 2 SPE5 Director  Javascript 
156 Name,Six 10 PE2 Senior   Java 
156 Name,Six 8 PE2 Senior   Javascript 

這是基於掀起了查詢具有Java或技能的人的JavaScript。正如你所看到的,員工147和156對Java和Javascript都有好感。

如果我這個存儲當前查詢到一個臨時表,說#TempTable

我可以#TempTable運行什麼查詢給我這樣一個結果:

id emp_name total_explabor_grade title  name 
518 Name,One 3 PE4 Software Engineer Java 
492 Name,Two 4 PE1 Software Engineer Java 
502 Name,Three 1 SPE5 Principal  Javascript 
410 Name,Four 3 ENG3 Software Engineer Java 
147 Name,Five 5,2 SPE5 Director  Java,Javascript 
156 Name,Six 10,8 PE2 Senior   Java,JavaScript 

我曾嘗試以各種形式加入#TempTable本身,但我還沒有能夠讓它像我剛剛發佈的那樣給我一張桌子。 這是迄今爲止我所編寫的代碼...

select t1.id, t1.emp_name, CONVERT(nvarchar(3),t1.total_exp)+','+CONVERT(nvarchar(3),t2.total_exp), t1.labor_grade, t1.title, t1.name+','+t2.name AS hits 
from #TempTable t1 JOIN #TempTable t2 
ON t1.id=t2.id 

有誰知道是否有可能做一個像加入我希望做?我的最新思路是需要多個選擇,但我還沒有完全想到它

+0

t1.name和t2.name指的是技能名稱,btw – Derek 2010-12-17 18:07:03

+0

可能的重複[SQL Server:我可以逗號分隔多行到一列?](http://stackoverflow.com/questions/2046037/sql -server-can-i-comma-delimit-multiple-rows-into-one-column) – 2010-12-17 18:13:13

回答

2

也許你可以想出一個解決方案通過group_concat

集團在平等列使員工對要被串聯他人的身份和group_concat

+0

http://explainextended.com/2010/06/21/group_concat-in-sql-server/ – 2010-12-17 18:17:59

+0

我能夠得到某種工作與此。它適用於一列,但我無法同時爲第二列工作。 +1指向正確的方向 – Derek 2010-12-17 19:43:33

0

根據您的數據,這是不可能的自加入,因爲您的行沒有唯一的密鑰。爲了讓自連接成爲一個選項,你必須防止一行被連接到自身。正因爲如此,上面的查詢實際上會返回id爲147的2行。

解決此問題的一個簡單方法是從temptable中選擇不同的ID和名稱,然後使用4個函數返回串聯所有年份的出現,勞工等級,職稱和技能。

0

這不是一個自我加入任務,因爲您必須一次加入表格以獲得每種可能的技能。如果員工的可能技能的最大數量是事先知道的並且相當小,那麼您可能會開始通過自我加入來接近它,但這不太可能是真實的。 (另一方面,如果技能的數量確實只能保證是Java和Javascript,而不是其他任何東西,那麼可以使用自連接或甚至更簡單的MIN/MAX GROUP BY來實現。

這實際上是一個要用GROUP BY查詢來解決的聚合問題。不幸的是,SQL Server沒有內置的字符串連接聚合函數(就像MySQL和其他一些產品一樣)。您可以通過幾種不同的方式(CTE或For XML)對其進行估算,其他受訪者已經鏈接了展示這些技術的文章。