2011-04-11 58 views
0

我有表和它的價值是排列在SQL Server

code Number name 
111 a2  'abc' 
112 b7  'abc1' 
113 a3  'abc2' 
113 c5  'abc2' 
114 d1  'abc4' 
115 s6  'abc3' 
116 s9  'a4' 
116 s9  'a5' 

我想我的價值的輸出是

code  Number1 number2 name 
111  a2  Null  'abc' 
112  b7  Null  'abc1' 
113  a3  C5  'abc2' 
114  d1  Null  'abc4' 
115  s6  Null  'abc3' 
116  s9  'a4'  'a5' 

怎麼可能從SQL查詢

+6

所以,你要'number2'包含交替來自'Number'和值'name',這取決於被複制?這將是非常不尋常的事情。 – 2011-04-11 12:22:44

+1

當代碼重複但數字和名稱不同時會發生什麼? – Lamak 2011-04-11 13:09:47

+2

你應該閱讀一個名爲[Self Joins]的主題(http://www.sqltutorial.org/sqlselfjoin.aspx)。您可以通過將[Union](http://msdn.microsoft.com/en-us/library/ms180026.aspx)函數與Self Joins結合使用來完成您想要的操作。告訴我們你到目前爲止所嘗試過的。 – 2011-04-11 13:16:59

回答

0

我我很困惑你的輸出。 在我看來,代碼= 113的行的'number2'列的值來自'Number'列。 對於代碼爲116的行,列'number2'來自'name'列。

我已經開始寫SQL幫助:

DECLARE @temp table (code INT, Number char(2), Name char(4)); 
INSERT INTO @temp (code,Number, Name) VALUES (111, 'a2', 'abc') 
INSERT INTO @temp (code,Number, Name) VALUES (112, 'b7', 'abc1') 
INSERT INTO @temp (code,Number, Name) VALUES (113, 'a3', 'abc2') 
INSERT INTO @temp (code,Number, Name) VALUES (113, 'c5', 'abc2') 
INSERT INTO @temp (code,Number, Name) VALUES (114, 'd1', 'abc4') 
INSERT INTO @temp (code,Number, Name) VALUES (115, 's6', 'abc3') 
INSERT INTO @temp (code,Number, Name) VALUES (116, 's9', 'a4') 
INSERT INTO @temp (code,Number, Name) VALUES (116, 's9', 'a5') 


SELECT T1.code, T1.Number, T2.Number, T1.Name 
FROM @temp T1 
LEFT JOIN @temp T2 ON T1.code = T2.code AND T1.Number=T2.Number AND T1.Name <> T2.Name 
WHERE T1.Number = (SELECT MIN(Number) FROM @temp T3 WHERE T3.code = T1.code) 
AND T1.Name = (SELECT MIN(Name) FROM @temp T4 WHERE T4.code = T1.code); 

哪個輸出是罰款除外一行代碼113 ... 你確定你想要的輸出???

問候, 中號