2013-09-24 51 views
2

我想連接一個字段與前一行和下一行。例如,如果我有這樣的:與前一行和下一行連接字段數據

|ID|word| 
|0 |Hi! | 
|1 |How | 
|2 |Are | 
|3 |You | 

我想與創建存儲過程輸入,「之前」和「之後」這表明應該有多少行使用前面和後面的當前行的。 例如,如果我們之前= 1有後= 1,則我們會得到

|ID|word  | 
|0 |Hi! How | 
|1 |Hi! How Are| 
|2 |How Are You| 
|3 |Are You | 

,如果我們之前= 2有後= 1,則我們會得到

|ID|word   | 
|0 |Hi! How  | 
|1 |Hi! How Are | 
|2 |Hi! How Are You| 
|3 |How Are You | 

由於事先

回答

2

檢查: DECLARE @Before TINYINT = 2 DECLARE @After TINYINT = 1

SELECT ISNULL((SELECT STUFF((SELECT ISNULL(TblBefore.word, '') + ' ' 
           FROM  Tbl TblBefore 
           WHERE TblBefore.Id BETWEEN T.Id - @before AND T.Id 
             - 1 
         FOR XML PATH('') , 
            TYPE).value('.', 'varchar(max)'), 1, 0, '') AS ChildValues 
       ), '') + T.Word + ' ' 
     + ISNULL((SELECT STUFF((SELECT ISNULL(TblBefore.word, '') + ' ' 
            FROM  Tbl TblBefore 
            WHERE TblBefore.Id BETWEEN T.Id + 1 AND T.Id 
              + @after 
          FOR XML PATH('') , 
             TYPE).value('.', 'varchar(max)'), 1, 0, 
            '') AS ChildValues 
       ), '') 
FROM Tbl T 
+0

真棒。非常感謝。你真的幫助我。但是我的數據中有一些字符不能在XML中使用,所以我得到了這個錯誤。你可以幫我嗎? FOR XML無法序列化節點'NoName'的數據,因爲它包含XML中不允許的字符(0x0016)。要使用FOR XML檢索此數據,請將其轉換爲二進制,varbinary或圖像數據類型並使用BINARY BASE64指令。 –

0

SELECT COLUMNNAME + '' +( SELECT TOP 1 Myt2.Columnname FROM表1 MYT2 WHERE Myt2.ColumnID < t1.ColumnID
ORDER BY ColumnID的 ) FROM表1 MYT1 ORDER BY Myt1.ColumnID

這段代碼適用於2級... :)仍然不是完整的答案。這可能有助於讓你達到第n級。

相關問題