Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединение строк / 14 сообщений из 14, страница 1 из 1
30.05.2018, 09:55
    #39652266
gigar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
Добрый день.
Есть две таблицы
price_list (столбцы номер прейскуранта и id клиента):
price_list_num || price_list_clients_id
11 1
11 3
11 7
12 8

clients(столбцы id клиента и название организации):
clients_id|| clients_name
1 магазин 1
3 магазин 2
7 магазин 3
8 магазин 4

Как сделать объединение строк в столбце название организации через запятую? Пробовал так:
SELECT
price_list.price_list_num
stuff(( select ','+cast(clients_name as nvarchar) as 'data()' from clients
where clients.clients_id=price_list.price_list_clients_id
for xml path('') ),1,1,'')
FROM price_list
group by price_list_num,price_list_clients_id

Но названия организаций указывает верно, но нет группировки.
Спасибо.
...
Рейтинг: 0 / 0
30.05.2018, 10:33
    #39652286
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
gigar,

1. Вложенный запрос (который "FOR XML") формируй по price_list_num, а не по price_list_clients_id.
2. Убири группировку по price_list_clients_id.
...
Рейтинг: 0 / 0
30.05.2018, 10:51
    #39652302
gigar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
Но ведь price_list_num есть только в одной таблице
...
Рейтинг: 0 / 0
30.05.2018, 10:57
    #39652309
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
gigar,

Что мешает запихнуть ее во вложенный запрос?
...
Рейтинг: 0 / 0
30.05.2018, 11:07
    #39652316
gigar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
Запрос тогда выводит все существующие организации через запятую, а надо чтобы группировалось по price_list_num
...
Рейтинг: 0 / 0
30.05.2018, 11:54
    #39652362
gigar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
Кто-нибудь может помочь?
...
Рейтинг: 0 / 0
30.05.2018, 12:10
    #39652381
LameUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
gigarКто-нибудь может помочь?

Офорите свои запросы через разметку кода.
Добавте табличные переменные с заполнением данных.
Объясните что хотите получить на выходе (в виде таблице).

Шанс получения помощи сильно увеличится!
...
Рейтинг: 0 / 0
30.05.2018, 12:13
    #39652383
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
gigar,

помочь МОГУТ многие. но мало кто ХОЧЕТ помогать.

Вопрос ваш задан сумбурно, тестовые данные приведены в непригодном для использования виде, требуемого результата не приведено вообще.
Вы сделали всё, чтобы отбить желание помогать вам...
...
Рейтинг: 0 / 0
30.05.2018, 12:28
    #39652388
gigar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
таблица price_list
price_list_numprice_list_clients_id1112

таблица clients
clients_idclients_name1клиент 12клиент 2

Должно получиться :
price_list_numprice_list_name1клиент 1 клиент 2

Запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT 
price_list.price_list_num,
stuff(( select ','+cast(clients_name as nvarchar) as 'data()' from clients
where clients.clients_id=price_list.price_list_clients_id
for xml path('') ),1,1,'')
FROM price_list
group by price_list_num,price_list_clients_id



Через данный запрос выводятся клиенты, но без группировки, как исправить?
...
Рейтинг: 0 / 0
30.05.2018, 12:34
    #39652401
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
gigar,

Рекомендации по оформлению сообщений в форуме , пункт 6, пример хорошего стиля
...
Рейтинг: 0 / 0
30.05.2018, 13:47
    #39652472
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
ну так что вам неясно? уберите из gb price_list_clients_id... пордулу с конкатенацией уберите в max
...
Рейтинг: 0 / 0
30.05.2018, 13:57
    #39652485
gigar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
Когда убираю price_list_clients_id из group
пишет ошибку:
Столбец "price_list.price_list_clients_id" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
...
Рейтинг: 0 / 0
30.05.2018, 14:09
    #39652502
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
На будущее, вот так выглядит правильно оформленный вопрос.
Правильно оформивший вопрос правильный ТСДобрый день, коллеги!
Есть две таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE @price_list TABLE ( price_list_num INT, price_list_clients_id INT )
INSERT INTO @price_list
VALUES
  ( 11, 1 ),
  ( 11, 3 ),
  ( 11, 7 ),
  ( 12, 8 )
;
DECLARE @clients TABLE ( clients_id INT, clients_name VARCHAR(20) )
INSERT INTO @clients
VALUES
  ( 1, 'магазин 1' ),
  ( 3, 'магазин 2' ),
  ( 7, 'магазин 3' ),
  ( 8, 'магазин 4' )
;


Как сделать объединение строк в столбце название организации через запятую? Пробовал так:
Код: sql
1.
...


А так - один из вариантов решения правильно оформленного вопроса.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT 
  pl.price_list_num,
  [clients] = STUFF( ( 
    SELECT 
      [*] = N','+ CONVERT( nvarchar(max), [clients_name] )
    FROM
      @price_list plc
      INNER JOIN @clients cl ON (
            cl.[clients_id] = plc.[price_list_clients_id] )
    WHERE
      plc.[price_list_num] = pl.[price_list_num]
    FOR XML PATH('') ), 1, 1, '' )
FROM
  ( SELECT DISTINCT price_list_num FROM @price_list ) pl
...
Рейтинг: 0 / 0
30.05.2018, 14:48
    #39652552
LameUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение строк
Код: sql
1.
2.
      
[*] = N','+ CONVERT( nvarchar(max), [clients_name] )


Если вам вдруг интересно - можно заменить на
Код: sql
1.
concat(',',clients_name)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединение строк / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]