這是我在這裏問在計算器的第一個問題,所以大家多多包涵請:)級聯多行成一個字符串
我問它,因爲它是有關這個問題的另一個線程,但被直接問在一個新的問題線程,所以在這裏。
我有一張帶有註釋文本的表格,每行最多包含256個字符,這些表格按字段「linenumber」排序,但我不確定數據庫中的linenumber順序是否正確。我將如何重新設計這個查詢的行號爲每個notesrecid確保測序?
在表NOTES_V上有一個名爲「linenumber」的字段 - 我嘗試訂購由notesrecid和linenumber構成的BA,但在子查詢中不允許排序。
我意識到,在極端不大可能案件的結果可能會溢出VARCHAR的8000個字符,但是這有什麼問題或將它「只是」被截斷爲8000字符最多?
SELECT A.DATASET, A.NOTESRECID, LEFT(A.NOTETXT,LEN(A.NOTETXT)-2) AS "NOTETXT", LEN(A.NOTETXT)-2 AS "#CHARS"
FROM (SELECT DISTINCT BB.DATASET, BB.NOTESRECID,
(SELECT BA.TXT+', ' AS [text()]
FROM NOTES_V BA
WHERE BA.DATASET=BB.DATASET AND BA.NOTESRECID=BB.NOTESRECID
ORDER BY BA.DATASET, BA.NOTESRECID
FOR XML PATH ('')) [NOTETXT]
FROM NOTES_V BB) A
下面所寫的方法效果很好,但我遇到了與CHAR(7)不被序列化的問題,所以我稍微重新編寫查詢是低於(7)用空格代替CHAR。
SELECT A.DATASET, A.NOTESRECID, A.NOTETXT, LEN(A.NOTETXT) AS "#CHARS"
FROM (SELECT BB.DATASET, BB.NOTESRECID,
stuff((SELECT REPLACE(BA.TXT,CHAR(7),' ')+', ' AS [text()]
FROM NOTES_V BA
WHERE BA.DATASET=BB.DATASET AND BA.NOTESRECID=BB.NOTESRECID
ORDER BY BA.DATASET, BA.NOTESRECID, BA.linenumber
FOR XML PATH ('A'),type).value('.','nvarchar(max)'),1,2,'') [NOTETXT]
FROM NOTES_V BB
GROUP BY BB.DATASET, BB.NOTESRECID) A
謝謝你的幫助,非常感謝。
方面preceeds DISTINCT在SQL 2008,你可以使用VARCHAR(最大值)。它沒有字符限制。 – tobias86 2011-04-06 08:45:25
你提到你已經通過notesrecid試圖訂購,但沒有談到這個列是什麼。你可以添加表結構與列的一些解釋? – 2011-04-06 08:57:53