+= (присваивание объединения строк) (Transact-SQL)
Объединяет две строки и присваивает строке результат этой операции. Например, если переменная @x имеет значение ‘Adventure’, то операция @x += ‘Works’ принимает исходное значение @x, добавляет к нему строку ‘Works’ и присваивает переменной @x новое значение (‘AdventureWorks’).
Синтаксис
expression += expression
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
выражение
Любое допустимое выражение любого символьного типа данных.
Типы результата
Возвращает тип данных, определенный для переменной.
Замечания
SET @v1 += ‘expression’ эквивалентно SET @v1 = @v1 + ‘expression’. Кроме того, SET @v1 = @v2 + @v3 + @v4 — это эквивалент SET @v1 = (@v2 + @v3) + @v4.
Оператор += нельзя использовать без переменной. Например, следующий код вызывает ошибку:
SELECT 'Adventure' += 'Works'
Примеры
А. Объединение с использованием оператора +=
В следующем примере выполняется объединение строк с помощью оператора += .
DECLARE @v1 VARCHAR(40); SET @v1 = 'This is the original.'; SET @v1 += ' More text.'; PRINT @v1;
This is the original. More text.
B. Порядок вычисления во время объединения с помощью оператора +=
В приведенном ниже примере выполняется объединение нескольких строк в одну длинную строку, а затем предпринимается попытка вычислить длину итоговой строки. В этом примере демонстрируются правила оценки и усечения при использовании оператора объединения.
DECLARE @x VARCHAR(4000) = REPLICATE('x', 4000) DECLARE @z VARCHAR(8000) = REPLICATE('z',8000) DECLARE @y VARCHAR(max); SET @y = ''; SET @y += @x + @z; SELECT LEN(@y) AS Y; -- 8000 SET @y = ''; SET @y = @y + @x + @z; SELECT LEN(@y) AS Y; -- 12000 SET @y = ''; SET @y = @y +(@x + @z); SELECT LEN(@y) AS Y; -- 8000 -- or SET @y = ''; SET @y = @x + @z + @y; SELECT LEN(@y) AS Y; -- 8000 GO
Y ------- 8000 (1 row(s) affected) Y ------- 12000 (1 row(s) affected) Y ------- 8000 (1 row(s) affected) Y ------- 8000 (1 row(s) affected)
SQL. Как объединить несколько строк в одну
Есть запрос — выдает 3 тыс. строчек, но проблема в том что в выводе у одного ID может быть 2,3 и больше строчек — т.е. допустим покупка продуктов — и где-то 1 продукт, а где-то пакет продуктов — соотвественно каждая единица товара это одна строка. Как объединить строки по одному заказу суммирая цену каждого продукта? Через внутренний SELECT(SUM) пробовал, к сожалению общую сумму всех покупок выдает.
Select o.1 as 'Дата создания заказа', o.2 as 'Дата доставки', coi.3 as 'Номер заказа', ((oi.4 * oi.5) + oi.6) as 'Стоимость', coi.7 as 'Сумма перевода ', co.8 as 'Дата перевода' from PLACE1 coi inner co ON co = coi and coi is not null INNER JOIN o ON o = coi Inner join oi ON o = oi Where "доп условия"
Мне нужно объединить строки в ‘Стоимость’
Отслеживать
задан 3 июл 2018 в 14:48
375 3 3 серебряных знака 21 21 бронзовый знак
Я не понял ваш вопрос. Добавьте в вопрос минимальный пример данных, ваш запрос с SUM , полученный результат, и ожидаемый результат.
3 июл 2018 в 14:51
GROUP BY по определенным полям должен помочь
3 июл 2018 в 14:53
Какая у вас СУБД? Допустим в MS SQL можно так: SUM(PRICE) OVER(PARTITION BY ProductID ORDER BY ProductID), но вообще добавьте пример и ожидаемое поведение.
Как объединить несколько строк в одну sql
Вы можете объединить несколько строк в одну с помощью оператора GROUP BY в SQL. Этот оператор позволяет группировать строки в таблице по значениям определенного столбца или набору столбцов.
Например, если у вас есть таблица orders с информацией о заказах, и вы хотите получить список всех клиентов и сумму их заказов, вы можете использовать следующий запрос:
SELECT customer_id, SUM(order_total) AS total_orders FROM orders GROUP BY customer_id;
Этот запрос сгруппирует все строки в таблице orders по столбцу customer_id и вычислит сумму всех заказов order_total для каждого уникального customer_id. Результатом будет таблица со столбцами customer_id и total_orders.
Вы также можете использовать функцию GROUP_CONCAT в MySQL для объединения значений нескольких строк в одну строку. Например, если у вас есть таблица products с информацией о продуктах, и вы хотите получить список всех категорий и соответствующих им продуктов в каждой категории, вы можете использовать следующий запрос:
SELECT category, GROUP_CONCAT(product_name SEPARATOR ', ') AS products FROM products GROUP BY category;
Этот запрос сгруппирует все строки в таблице products по столбцу category и объединит значения столбца product_name для каждой категории в одну строку с помощью функции GROUP_CONCAT . Результатом будет таблица со столбцами category и products, где значение в столбце products будет содержать список всех продуктов в каждой категории, разделенных запятой.
Конкатенация строк в T-SQL. Способы используемые в Microsoft SQL Server
Всем привет! Сегодня мы рассмотрим несколько способов конкатенации строк, которые можно использовать в Microsoft SQL Server на языке T-SQL.
Что такое конкатенация строк
Конкатенация – это операция соединения нескольких текстовых строк в одну.
Например, если выполнить конкатенацию двух отдельных строк «Язык» и «SQL», то получится одна строка «ЯзыкSQL».
В SQL конкатенация используется для соединения текстовых значений нескольких столбцов, или соединения значения столбца с константной строкой.
Конкатенация строк в Microsoft SQL Server
В Microsoft SQL Server на языке T-SQL мы можем использовать несколько способов для конкатенации строк, в частности два: оператор + и функцию CONCAT.
Давайте подробнее рассмотрим каждый из этих способов. Однако сначала давайте создадим тестовые данные, чтобы наглядно видеть результат работы конкатенации строк.
Исходные данные для примеров
Допустим, что у нас есть таблица, которая содержит Фамилию Имя Отчество клиентов. При этом каждую часть ФИО мы храним в отдельном столбце.
CREATE TABLE Customers ( Customer_Id INT NOT NULL IDENTITY(1,1), SurName VARCHAR(100) NULL, FirstName VARCHAR(100) NULL, Patronymic VARCHAR(100) NULL ); GO INSERT INTO Customers (SurName, FirstName, Patronymic) VALUES ('Иванов', 'Сергей', 'Иванович'), ('Попов', 'Роман', 'Алексеевич'), ('Сергеев', 'Петр', 'Вячеславович'), ('John', 'Smith', NULL), ('Oliver', 'Adamson', NULL); GO SELECT * FROM Customers;

Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.
Использование оператора +
Первый и часто используемый способ конкатенации строк в Microsoft SQL Server, который реализован уже очень давно и является, наверное, классическим – это способ с использованием оператора +.
Принцип его работы следующий: мы указываем текстовое значение, им может быть как значение из столбца, так и константное текстовое значение, после него пишем +, а затем другое текстовое значение, которое мы хотим присоединить к первому текстовому значению. И таким образом мы можем объединить несколько строк в одну строку.
Синтаксис примерно следующий
Строка1 + Строка2 + Строка3 +…… Строка n = Итоговая строка
А теперь давайте представим, что нам необходимо вывести Фамилию Имя Отчество из нашей таблицы в одной строке.
Для этого мы можем использовать оператор + и написать следующий запрос.
SELECT SurName + ' ' + FirstName + ' ' + Patronymic AS [ФИО] FROM Customers;

В данном случае после каждого столбца мы вставляем еще и пробел, для того чтобы ФИО не сливалось в одну непрерывную строку.
Как было отмечено ранее, вместо названия столбца мы можем указывать любую текстовую строку, например, следующим образом.
SELECT 'Фамилия' + 'Имя' + 'Отчество' AS [ФИО]

Вы наверняка заметили, что в первом примере у некоторых строк результирующего набора данных у нас выводится значение NULL. Это происходит потому, что в некоторых записях нашей таблицы нет значений, т.е. в них хранится NULL, в частности у записей с идентификаторами 4 и 5.
А оператор + в случае соединения нормального значения со значением NULL будет возвращать NULL. Иными словами, если в любой из строк, которые мы соединяем с помощью оператора +, будет NULL, то результат всей конкатенации также будет NULL. И это является одним из главных недостатков данного способа конкатенации строк в T-SQL.
Конечно же, мы можем легко устранить данную проблему, обернув столбец, например, функцией ISNULL, которая возвращает значение второго параметра, если значение первого NULL.
Таким образом, чтобы предотвратить появление NULL значений в нашем запросе, мы можем с помощью функции ISNULL проверять значения столбцов и, если там NULL, выводить просто пусто.
SELECT ISNULL(SurName,'') + ' ' + ISNULL(FirstName,'') + ' ' + ISNULL(Patronymic,'') AS [ФИО] FROM Customers;

Как видим, в данном случае результат уже более корректен.
Использование функции CONCAT
Вторым способом конкатенации строк в Microsoft SQL Server является способ с использованием функции CONCAT.
CONCAT – функция SQL, которая соединяет несколько текстовых значений в одну строку, другими словами, выполняет конкатенацию строк.
В данной функции уже реализована проверка на NULL, и нам не требуется самостоятельно проверять столбец на наличие таких значений и пропускать все значения столбца через функцию ISNULL.
Однако данная функция появилось лишь в 2012 версии SQL Server, т.е. до 2012 версии можно использовать только оператор +.
Принцип работы функции CONCAT следующий: она объединяет все параметры, которые мы передаем в эту функцию, в одну строку. Параметров можно передавать несколько, а в качестве них можно указывать как константную строку, т.е. просто текст, так и столбец таблицы.
Давайте напишем SQL запрос, который будет эквивалентен нашему предыдущему запросу.
SELECT CONCAT(SurName, ' ', FirstName, ' ', Patronymic) AS [ФИО] FROM Customers;

Как видим, результат точно такой же.
На сегодня это все, надеюсь, материал был Вам полезен, пока!
