У меня есть следующий SQL
результата от SELECT
запроса:SQL SELECT: сцепляется столбец с разрывами строк и заголовком в группу
ID | category| value | desc
1 | A | 10 | text1
2 | A | 11 | text11
3 | B | 20 | text20
4 | B | 21 | text21
5 | C | 30 | text30
Этого результат сохраняется во временной таблице с именем #temptab
. Эта временная таблица затем используется в другом SELECT
для создания нового столбца посредством конкатенации строк (не спрашивайте меня о подробном обосновании этого. Это код, который я взял у коллеги). Через FOR XML PATH()
вывод этого столбца представляет собой список результатов и затем используется для отправки писем клиентам.
Второй SELECT
выглядит следующим образом:
SELECT t1.column,
t2.column,
(SELECT t.category + ' | ' + t.value + ' | ' + t.desc + CHAR(9) + CHAR(13) + CHAR(10)
FROM #temptab t
WHERE t.ID = ttab.ID
FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)') AS colname
FROM table1 t1
...
INNER JOIN #temptab ttab on ttab.ID = someOtherTable.ID
...
Не желая вдаваться в излишние подробности, столбец colname
заселяется с несколькими записями (из-за нескольких матчей) и, следовательно, более длинная строка хранится в эта колонка (CHAR(9) + CHAR(13) + CHAR(10)
- это, по существу, разрыв строки). Результат/содержание colname
выглядит следующим образом (используются для отправки почты клиентов):
A | 10 | text1
A | 11 | text11
B | 20 | text20
B | 21 | text21
C | 30 | text30
Теперь я хотел бы знать, если есть способ более красиво форматировать эту выходную строку. В лучшем случае был бы сгруппировать ту же категорию вместе и добавить заголовок и пустую строку между различными категориями:
*A*
A | 10 | text1
A | 11 | text11
*B*
B | 20 | text20
B | 21 | text21
*C*
C | 30 | text30
Моим вопросом: Как я должен изменить приведенный выше запрос (особенно строка-конкатенация-часть) для достижения вышеуказанного форматирования? Я думал об использовании инструкции GROUP BY
, но это, очевидно, не дает желаемого результата.
Edit: Я использую Microsoft SQL Server 2008 R2 (SP2) - 10.50.4270.0 (X64)
Какие dbms вы используете? (Некоторый специфический SQL-код продукта.) – jarlh
@jarlh Я считаю, что for-xml-путь является специфичным для SQL-сервера, мы просто не знаем версию. хотя я бы подумал, что можно с уверенностью сказать, что это 2008 + – xQbert
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4270.0 (X64) (* обновлено в сообщении *) – beta