Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/596: Рейтинг темы: голосов - 596, средняя оценка - 4.92
4 / 4 / 6
Регистрация: 30.11.2012
Сообщений: 41
1

Как объединить данные из нескольких строк в одну, через запятую?

18.10.2013, 14:52. Показов 122600. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть три таблицы:
Фильм: id, название, ...
Актер: id, имя, ...
Фильм_актер: id, id_filma, id_aktera

Я делаю запрос:
SQL
1
2
3
4
5
SELECT 
      [dbo].[film].[nazvanie], [dbo].[akter].[imya]
  FROM [dbo].[film], [dbo].[akter], [dbo].[film_akter]
  WHERE [dbo].[film].[id] = [dbo].[film_akter].[id_filma]
  AND [dbo].[akter].[id] = [dbo].[film_akter].[id_aktera]
и мне выводит таблицу с первого скрина, а мне нужно чтобы было как на втором скрине. Как это сделать?
Миниатюры
Как объединить данные из нескольких строк в одну, через запятую?   Как объединить данные из нескольких строк в одну, через запятую?  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2013, 14:52
Ответы с готовыми решениями:

Как объединить данные из нескольких строк в одну, через запятую?
В MS SQL можно с помощью GROUP_CONCAT. Но как объединить данные из нескольких строк в одну, через...

Как можно данные из нескольких ячеек записать в одну через запятую?
Подскажите, пожалуйста, как можно данные из нескольких ячеек записать в одну через запятую?

Совмещение значений нескольких строк в одну через запятую
Уважаемые знатоки Access, Помогите, пожалуйста, решить вставшую передо мной проблему. Знаю, что...

Совмещение значений нескольких строк в одну через запятую - MS Access
Уважаемые знатоки Access, Помогите, пожалуйста, решить вставшую передо мной проблему. Знаю, что...

15
1652 / 1151 / 173
Регистрация: 23.07.2010
Сообщений: 6,850
18.10.2013, 16:35 2
http://www.sql.ru/faq/faq_topic.aspx?fid=130
2
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
23.11.2016, 18:52 3
Avalan4er,
здравствуйте
вы разобрались с этой вещью
подскажите как это делается
заранее благодарен
0
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
24.11.2016, 05:27 4
подскажите как сделать вот такое
Миниатюры
Как объединить данные из нескольких строк в одну, через запятую?  
0
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
24.11.2016, 05:28 5
работаю в mssql
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
24.11.2016, 09:10 6
По образцу https://www.cyberforum.ru/post6723364.html
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
26.11.2016, 03:42 7
texnik-san, спасибо получилось , хорошо всё работает.
подскажите а вот такое как сделать.
чтобы не обращать внимание на общий id / чтобы выводить только непустые значения и также группируя по полю lay / и непосредственно со словами
заранее благодарен
Миниатюры
Как объединить данные из нескольких строк в одну, через запятую?  
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
26.11.2016, 08:03 8
Зависит от того, всегда ли в вашей таблице на один lay приходится только по одному значению в каждом столбце (неважно, в одной строке или разных), или могут быть несколько, и числовые ли там значения. Если да - то можно обойтись и гораздо более простыми методами:

Oracle 11 SQL
1
2
3
SELECT lay, 'угол1=' + SUM(angle1) + ', угол2=' + SUM(angle2) + ', угол3 от ' + SUM(angle3) + ' до ' + SUM(angle4)
FROM схема.ИмяТаблицы
GROUP BY lay
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
26.11.2016, 11:36 9
спасибо
конечно не увидел пока результата
Ошибка при преобразовании типа данных varchar к numeric.
подскажите где тип поменять.
в таблице sql стоит у полей numeric(10, 2)
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
26.11.2016, 12:01 10
Ой, ну конечно, SUM(angle1) нужно же обернуть в функцию преобразования в текст. Какой-нибудь Cast или Convert. Вы извините, у меня аксесные привычки, сама постоянно наступаю на те же грабли.

Добавлено через 4 минуты
SQL
1
2
3
4
5
6
SELECT lay, 'угол1=' + CAST(SUM(angle1) AS VARCHAR(11)) + 
                   ', угол2=' + CAST(SUM(angle2) AS VARCHAR(11)) + 
                   ', угол3 от ' + CAST(SUM(angle3) AS VARCHAR(11)) + 
                   ' до ' + CAST(SUM(angle4) AS VARCHAR(11))
FROM схема.ИмяТаблицы
GROUP BY lay
Надеюсь не напутала со скобками...
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
27.11.2016, 07:39 11
texnik-san, хорошо всё работает . спасибо.
но только вот такая история получается, если какие либо столбики не имеют значения. например angle3 и angle4 то ничего не выводится а надо бы чтобы выводилось angle1 и angle2.
как дописать, типа условие что если пустое поле то даже не выводить слова 'угол3' а остальное выводить где не пусто

Добавлено через 1 час 21 минуту
Код
угол2=' + cast(SUM(iif(angle2,is null,null)) AS VARCHAR(11))
чтото делаю не так. это не работает

Добавлено через 52 минуты
Код
, 'угол1=' + cast(SUM(iif(angle1 is not null,1,null)) AS VARCHAR(11) )+ '
, угол2=' + cast(SUM(iif(angle2  is not null,1,null)) AS VARCHAR(11))+ '
, угол3 от ' + cast(SUM(iif(angle3 is not null,1,null)) AS VARCHAR(11) )+
 ' до ' + cast(SUM(iif(angle4 is not null,1,null)) AS VARCHAR(11))
сделал так всё равно не хочет как я хочу чтобы выводилось.
выводит именно то где все столбики имеют чтото
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
27.11.2016, 08:59 12
SQL
1
2
3
4
5
6
SELECT lay, IsNull('угол1=' + CAST(SUM(angle1) AS VARCHAR(11)),'') + 
                   IsNull(', угол2=' + CAST(SUM(angle2) AS VARCHAR(11)),'') + 
                   IsNull(', угол3 от ' + CAST(SUM(angle3) AS VARCHAR(11)) + 
                   ' до ' + CAST(SUM(angle4) AS VARCHAR(11)),'')
FROM схема.ИмяТаблицы
GROUP BY lay
Значения angle3 и angle4 тут проверяются парой - если хотя бы одного нет, оба не будут выведены.
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
27.11.2016, 12:35 13
всё хорошо работает , спасибо .
вот код
Код
 IsNull('угол1=' + CAST(SUM(angle1) AS VARCHAR(100)),'') + 
                   IsNull(', угол2=' + CAST(SUM(angle2) AS VARCHAR(100)),'') + 
                   IsNull(', угол3 от ' + CAST(SUM(angle3) AS VARCHAR(100)) + 
                   ' до ' + CAST(SUM(angle4) AS VARCHAR(100)),'')
но самое интересное происходит умножение , то на 2 то на 3
вот рисунок--красным что должно быть
Миниатюры
Как объединить данные из нескольких строк в одну, через запятую?  
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
27.11.2016, 13:07 14
Цитата Сообщение от pek Посмотреть сообщение
но самое интересное происходит умножение , то на 2 то на 3
Значит, дублируются у вас данные. Больше чем по одному разу внесены.

SQL
1
2
3
4
5
6
7
8
SELECT lay,
    IsNull('угол1=' + CAST(SUM(angle1) AS VARCHAR(100)),'') + 
                   IsNull(', угол2=' + CAST(SUM(angle2) AS VARCHAR(100)),'') + 
                   IsNull(', угол3 от ' + CAST(SUM(angle3) AS VARCHAR(100)) + 
                   ' до ' + CAST(SUM(angle4) AS VARCHAR(100)),'') AS Description
FROM (SELECT DISTNCT lay, angle1, angle2, angle3, angle4
        FROM схема.ИмяТаблицы) AS TT
GROUP BY lay
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
29.11.2016, 02:30 15
По образцу Значения через запятую
#6
подскажите как вот эту конструкцию всю объявить nvarchar(VARCHAR)
Код
stuff((
    select ',' + CAST( id  AS VARCHAR)
    from act_prinyat_history 
    where act_shapka_id=t.act_shapka_id 
    order by id
    for XML path('')
    ),1,1,'') lst
потому как при выгрузке в excel через делфи выдаёт не корректное значения . я считаю что здесь только id переводится в VARCHAR не вся конструкция

Добавлено через 37 минут
всё разобрался
надо было сделать так
Код
for XML path(''), TYPE
            ).value('.', 'NVARCHAR(3000)' 
        
    ),1,1,'')
0
0 / 0 / 0
Регистрация: 08.06.2020
Сообщений: 5
22.06.2020, 13:02 16
Цитата Сообщение от Avalan4er Посмотреть сообщение
и мне выводит таблицу с первого скрина, а мне нужно чтобы было как на втором скрине. Как это сделать?
вы нашли ответ ? я тоже столкнулся с такой проблемой
0
22.06.2020, 13:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2020, 13:02
Помогаю со студенческими работами здесь

Вывод данных из нескольких строк таблицы в одну строку через разделитель (пробел, запятую)
Добрый день! Есть табличка с адресами: addr ul1 ul2 dom вул. 1...

Объединить дату из нескольких строк в одну
День добрый. Вопрос такой есть 3 столбца 1) дня 21 2) месяца 05 3) год 2017 как...

Как вытащить данные из нескольких строк в таблице в одну переменную?
Например, у нас в таблице есть столбец что хранить простые числа, таких записей несколько, как...

Несколько строк адресов в одну ячейку через запятую
Добрый день. Есть файл: 1 столбец - код объекта, 2 столбец - эл. адрес сотрудника. В каждой ячейке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru