У меня есть такая структура таблицы:
Первая таблица
ID | Text
----------------------
342 | Sampl <--
342 | e Text.. <--
343 | Lorem ipsum
344 | Pellentesque habitant
Вторая таблица
ID | lineNumb
----------------------
342 | 1
342 | 2
343 | 1
344 | 1
Текст разделен на несколько строк. Идентификатор идентифицирует их как один набор данных. Номер строки любого набора данных варьируется.
Есть ли разумный способ сначала получить максимальный номер строки, а затем объединить текст, не соединяя по левому краю каждый номер строки?
Вот кое-что, что работаетно это нелегкий способ жестко закодировать 40 оставленных соединений:
SELECT *
FROM
(SELECT id,
COALESCE(Rtrim(Cast(z1.dfw350_text AS VARCHAR(MAX))), '') + Char(13) + Char(10) + COALESCE(Rtrim(Cast(z2.dfw350_text AS VARCHAR(MAX))), '') + Char(13) + Char(10) + COALESCE(Rtrim(Cast(z3.dfw350_text AS VARCHAR(MAX))), '') + Char(13) + Char(10) + COALESCE(Rtrim(Cast(z4.dfw350_text AS VARCHAR(MAX))), '') + Char(13) + Char(10) + COALESCE(Rtrim(Cast(z5.dfw350_text AS VARCHAR(MAX))), '') + Char(13) + Char(10) + COALESCE(Rtrim(Cast(z6.dfw350_text AS VARCHAR(MAX))), '') + Char(13) + Char(10) + COALESCE(Rtrim(Cast(z7.dfw350_text AS VARCHAR(MAX))), '') .... AS texte
FROM table1
LEFT JOIN
(SELECT *
FROM table1
WHERE linenumb = 2 ) z2 ON table1.id = z2.id
LEFT JOIN
(SELECT *
FROM table1
WHERE linenumb = 3 ) z3 ON table1.id = z3.id
LEFT JOIN
(SELECT *
FROM table1
WHERE linenumb = 4 ) z4 ON table1.id = z4.id) AS ka
INNER JOIN (
SELECT id,
linenumb
FROM table2
GROUP BY id,
linenumb x ON ka.id=x.id
Ожидаемый результат - запрос, подобный следующему:
ID | Text
----------------------
342 | Sample Text..
343 | Lorem ipsum
344 | Pellentesque habitant