1
我有以下的(結構化很差)表:中合併多行嵌套查詢
tbl.quotes A
quoteid | assignedID | created_by | name
int, int, varchar, varchar
tbl.quote_notes B
id | quoteID | userID | noteText
int, int, varchar, text
tbl.admins C
id | name
int, varchar
tbl.agents D
id | name
int, varchar
我有以下查詢,但我需要多行每個quote_notes.noteText上的每個結果的報價相結合。
SELECT
A.quoteid,
A.name,
C.name,
D.name,
(SELECT
TOP 1 notetext
FROM quote_notes B
WHERE B.quoteid = A.quoteid
ORDER BY dateentered DESC
) AS [notes]
FROM quotes A
LEFT JOIN admins C
ON A.assignedid = C.id
LEFT JOIN agents D
ON A.created_by = D.id
WHERE A.createuserid = 'agentname'
這產生,並且不結合quote_notes.noteText多行:
12345 | Quote Name | Admin Name | Agent Name | Notes
所需的結果:
12345 | Quote Name | Admin Name | Agent Name | Note1, Note2, Note3
我只好寫了一個while循環行結合,但不能得到它使用嵌套的select語句,因爲它使用變量。它也只適用於1報價
DECLARE @rowcount INTEGER
DECLARE @Count INTEGER
DECLARE @note VARCHAR(MAX)
SET @Count = 1
SET @note = ''
SET @rowcount = (SELECT COUNT(quoteID) FROM quote_notes WHERE quoteID = '12345')
WHILE @Count<[email protected]
BEGIN
IF @note!=''
SET @note = @note+',' + (SELECT convert(varchar(max), noteText) FROM quote_notes WHERE id = @Count)
ELSE
SET @note = (SELECT noteText FROM quote_notes WHERE id = @Count)
SET @[email protected]+1
END
SELECT @note AS note
任何幫助,將不勝感激,謝謝!
您的查詢不匹配表定義。請改正。 – Serg
@Serg我的歉意,我試圖去掉長表名以方便閱讀。我相信他們現在都匹配。 – evade
請參閱http://stackoverflow.com/questions/31211506/how-stuff-and-for-xml-path-work-in-sql-server – Serg