Ms sql объединить строки в одну

Ms sql объединить строки в одну

Есть SELECT-запрос, который возвращает 5 строк. Как можно их склеить в одну с каким-либо разделителем?

Сейчас у меня так работает: select comment+’,’ from dbo.Reason for xml path(»)

Может есть идея по-лучше?

Спасибо.

1 ответ 1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками sql-server или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.14.35781

Я пытаюсь перенести приложение на базе MySQL на Microsoft SQL Server 2005 (не по выбору, но это жизнь).

В исходном приложении мы использовали почти полностью совместимые с ANSI-SQL операторы, с одним существенным исключением — мы часто использовали функцию group_concat MySQL.

group_concat , кстати, делает это: учитывая таблицу, скажем, имена сотрудников и проекты .

. и вот что вы получаете с group_concat:

Так что я хотел бы знать: возможно ли написать, скажем, пользовательскую функцию в SQL Server, которая эмулирует функциональность group_concat ?

У меня почти нет опыта использования UDF, хранимых процедур или чего-либо подобного, просто прямого SQL, поэтому, пожалуйста, перепутайте слишком много объяснений:)

10 ответов

SQL Server 2017 вводит новую агрегатную функцию

Объединяет значения строковых выражений и значений разделителей мест между ними. Сепаратор не добавляется в конце строки.

Конкатенированные элементы можно упорядочить, добавив WITHIN GROUP (ORDER BY some_expression)

. Для версий 2005-2016 я обычно использую XML метод в принятом ответе.

Однако это может быть неудачным при некоторых обстоятельствах. например если данные, которые будут конкатенированы, содержат CHAR(29) , вы видите

FOR XML не может сериализовать данные . потому что он содержит символ (0x001D), который не разрешен в XML.

Более надежным методом, который может обрабатывать все символы, будет использование агрегата CLR. Однако применение этого подхода к сложным элементам сложнее.

Метод присвоения переменной не гарантируется и его следует избегать в производственном коде.

ОБЛАСТЬ ПРИМЕНЕНИЯ: SQL Server База данных SQL Azure Azure Synapse Analytics (хранилище данных SQL) Parallel Data Warehouse APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse

Оператор в строковом выражении, объединяющий две или более символьных или двоичных строки, два или более столбцов или несколько строк и имен столбцов в одно выражение (строковый оператор). An operator in a string expression that concatenates two or more character or binary strings, columns, or a combination of strings and column names into one expression (a string operator). Например, SELECT ‘book’+’case’; возвращает bookcase . For example SELECT ‘book’+’case’; returns bookcase .

Читайте также:  Игры про нло на пк

Синтаксические обозначения в Transact-SQL Transact-SQL Syntax Conventions

Синтаксис Syntax

Аргументы Arguments

expression expression
Любое действительное выражение любого типа данных в категории символьных и двоичных данных, за исключением типов данных image, ntext и text. Is any valid expression of any one of the data types in the character and binary data type category, except the image, ntext, or text data types. Оба выражения должны иметь одинаковый тип данных, или одно из выражений должно допускать неявное преобразование к типу данных другого выражения. Both expressions must be of the same data type, or one expression must be able to be implicitly converted to the data type of the other expression.

При сцеплении двоичных строк с любыми символами между двоичными строками необходимо использовать явное преобразование в символьные данные. An explicit conversion to character data must be used when concatenating binary strings and any characters between the binary strings. В следующем примере показано, когда CONVERT или CAST должны использоваться с двоичной конкатенацией и когда CONVERT или CAST не нужно использовать. The following example shows when CONVERT , or CAST , must be used with binary concatenation and when CONVERT , or CAST , does not have to be used.

Типы результата Result Types

Возвращает тип данных аргумента с самым высоким приоритетом. Returns the data type of the argument with the highest precedence. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL). For more information, see Data Type Precedence (Transact-SQL).

Remarks Remarks

При работе с пустыми строками нулевой длины оператор + (объединение строк) ведет себя иначе, чем при работе со значениями NULL или с неизвестными значениями. The + (String Concatenation) operator behaves differently when it works with an empty, zero-length string than when it works with NULL, or unknown values. Символьная строка символа нулевой длины может быть указана в виде двух одинарных кавычек без каких-либо символов между ними. A zero-length character string can be specified as two single quotation marks without any characters inside the quotation marks. Двоичная строка нулевой длины может быть указана как 0x без указания каких-либо байтовых значений в шестнадцатеричной константе. A zero-length binary string can be specified as 0x without any byte values specified in the hexadecimal constant. При сцеплении строки нулевой длины всегда сцепляются две указанные строки. Concatenating a zero-length string always concatenates the two specified strings. При работе со строками со значением NULL результат объединения зависит от настроек сеанса. When you work with strings with a null value, the result of the concatenation depends on the session settings. При присоединении нулевого значения к известному значению результатом будет неизвестное значение, объединение строк с нулевым значением также дает нулевое значение, как и в арифметических действиях с нулевыми значениями. Just like arithmetic operations that are performed on null values, when a null value is added to a known value the result is typically an unknown value, a string concatenation operation that is performed with a null value should also produce a null result. Однако можно изменить данное поведение, поменяв значение CONCAT_NULL_YIELDS_NULL для текущего сеанса. However, you can change this behavior by changing the setting of CONCAT_NULL_YIELDS_NULL for the current session. Дополнительные сведения см. в разделе SET CONCAT_NULL_YIELDS_NULL (Transact-SQL). For more information, see SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).

Читайте также:  Как подключить усилитель пионер

Если результат объединения строк превышает предел в 8 000 байт, то он усекается. If the result of the concatenation of strings exceeds the limit of 8,000 bytes, the result is truncated. Однако усечения не произойдет, если хотя бы одна из сцепляемых строк принадлежит к типу больших значений. However, if at least one of the strings concatenated is a large value type, truncation does not occur.

Примеры Examples

A. A. Использование объединения строк Using string concatenation

В следующем примере создается единственный столбец с заголовком Name из нескольких символьных столбцов, где за фамилией лица следуют запятая, один пробел и имя того же лица. The following example creates a single column under the column heading Name from multiple character columns, with the last name of the person followed by a comma, a single space, and then the first name of the person. Результирующий набор сортируется в алфавитном порядке по возрастанию, сначала по фамилии, а затем по имени. The result set is in ascending, alphabetical order by the last name, and then by the first name.

Б. B. Объединение числовых типов данных и дат Combining numeric and date data types

В приведенном ниже примере функция CONVERT используется для объединения типов данных numeric и date. The following example uses the CONVERT function to concatenate numeric and date data types.

Результирующий набор: Here is the result set.

В. C. Использование объединения нескольких строк Using multiple string concatenation

Следующий пример сцепляет несколько строк в одну длинную строку для отображения фамилии и первой буквы инициалов вице-президентов в Компания Adventure Works Cycles Adventure Works Cycles . The following example concatenates multiple strings to form one long string to display the last name and the first initial of the vice pres >Компания Adventure Works Cycles Adventure Works Cycles . После фамилии ставится запятая, а после первой буквы инициалов — точка. A comma is added after the last name and a period after the first initial.

Читайте также:  Asus rt n56u firmware

Результирующий набор: Here is the result set.

Г. D. Использование больших строк при объединении Using large strings in concatenation

В приведенном ниже примере выполняется объединение нескольких строк в одну длинную строку, а затем предпринимается попытка вычислить длину итоговой строки. The following example concatenates multiple strings to form one long string and then tries to compute the length of the final string. Итоговая длина результирующего набора равна 16 000, так как вычисление выражения начинается слева, то есть @x + @z + @y => (@x + @z) + @y. The final length of resultset is 16000, because expression evaluation starts from left that is, @x + @z + @y => (@x + @z) + @y. В этом случае результат (@x + @z) усекается до 8000 байт, а затем в результирующий набор добавляется значение @y, из-за чего длина итоговой строки становится равна 16 000. In this case the result of (@x + @z) is truncated at 8000 bytes and then @y is added to the resultset, which makes the final string length 16000. Так как @y — это строка типа с большим значением, усечения не происходит. Since @y is a large value type string, truncation does not occur.

Результирующий набор: Here is the result set.

Примеры: Azure Synapse Analytics (хранилище данных SQL) Azure Synapse Analytics (SQL DW) и Параллельное хранилище данных Parallel Data Warehouse Examples: Azure Synapse Analytics (хранилище данных SQL) Azure Synapse Analytics (SQL DW) and Параллельное хранилище данных Parallel Data Warehouse

Д. E. Использование объединения нескольких строк Using multiple string concatenation

В приведенном ниже примере несколько строк сцепляются в одну длинную строку для отображения фамилий и инициалов имен вице-президентов из образца базы данных. The following example concatenates multiple strings to form one long string to display the last name and the first initial of the vice presidents within a sample database. После фамилии ставится запятая, а после первой буквы инициалов — точка. A comma is added after the last name and a period after the first initial.

Результирующий набор: Here is the result set.

Ссылка на основную публикацию
Adblock detector