powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объединить значения из нескольких столбцов и вывести их в строку без повторений
8 сообщений из 8, страница 1 из 1
Объединить значения из нескольких столбцов и вывести их в строку без повторений
    #39871276
zumotamokhimoru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте форумчане!
Возникла необходимость в таком запросе:
Есть два столбца с информацией, допустим с адресами
было стало
адрес1 адрес2
адрес3 адрес4
адрес2 адрес5
адрес6 адрес3

При нужном запросе необходимо вывести в отдельный столбец строку с адресами, которые повторяются между собой, независимо где они были в первом или во втором столбце и убрать повторяющиеся, то есть по логике он выводит
новый стоблец
адрес1, адрес2, адрес2, адрес5
адрес3, адрес4, адрес6, адрес3

Отбросим повторения:
новый столбец
адрес1, адрес2, адрес5
адрес3, адрес4, адрес6

Добавим в первые два столбца новую запись:
адрес5 адрес6

Теперь запрос выведет
адрес1, адрес2, адрес3, адрес4, адрес2, адрес5, адрес6, адрес3, адрес5, адрес6

Отбросим повторения:
адрес1, адрес2, адрес3, адрес4, адрес5, адрес6

Можно ли это как-то вообще реализовать запросами?
...
Рейтинг: 0 / 0
Объединить значения из нескольких столбцов и вывести их в строку без повторений
    #39871331
MAPA3OT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zumotamokhimoru,
В один столбец - легко:
Код: plsql
1.
2.
3.
select COL1 from MY_TABLE
UNION
select COL2 from MY_TABLE



Развернуть в строку тоже просто - GROUP_CONCAT

А вот если вам нужна однострочная таблица, с уникальными значениями, то это зависит от вашей версии СУБД, возможно придётся самому колхозить PIVOT.
...
Рейтинг: 0 / 0
Объединить значения из нескольких столбцов и вывести их в строку без повторений
    #39871355
MAPA3OT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, нет, вру, сейчас вот запрос для первого случая, а вот со вторым очень не уверен, что это можно сделать без приседаний.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
create table my_table as
select 'адрес1' col1,	'адрес2' col2 from dual union all
select 'адрес3' col1,	'адрес4' col2 from dual union all
select 'адрес2' col1,	'адрес5' col2 from dual union all
select 'адрес6' col1,	'адрес3' col2 from dual;


select DISTINCT GROUP_CONCAT(DISTINCT c ORDER BY c)
from 
  (
    select 
      if(t.a=1, @a:=@a+1, @a) n,
      case t.a 
        when 1 then t1.col1
        when 2 then t1.col2
        when 3 then t2.col1
        when 4 then t2.col2
      end c
    from
    (
      select @a:=0
    ) tt,
    (
      select 1 a union all
      select 2 a union all
      select 3 a union all
      select 4 a
    ) t,
    my_table t1
    INNER  JOIN my_table t2
      on (t1.col1 in (t2.col1, t2.col2) or t1.col2 in (t2.col1, t2.col2)) 
          and (t1.col1 != t2.col1 and t1.col2 != t2.col2)
  ) res
GROUP BY n
...
Рейтинг: 0 / 0
Объединить значения из нескольких столбцов и вывести их в строку без повторений
    #39871362
MAPA3OT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только сейчас дошло, это же банальное нахождение цепочек. То есть решаемое.
Но вот вопрос, а что делать с кольцами и повторениями?
То есть, что и почему должно выдать вот это:

COL1 COL2122334412431
...
Рейтинг: 0 / 0
Объединить значения из нескольких столбцов и вывести их в строку без повторений
    #39872003
zumotamokhimoru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за отведённое время, смотря на ваш запрос, я понимаю, что ничего не смыслю в SQL)
Да, вы правы, это нахождение цепочек! Мне необходимо вывести из такой таблицы цепочку из столбцов bilo, stalo, которая не повторяется
idTPseknomdataprimechstalobilo11192119-22019-08-13NULL36 Правобережная18 Правобережная23421342-12019-08-13NULL44 Центральная гор.35 Центральная гор.321121-12019-08-04NULL15 Центральная гор.22 Правобережная43422342-22019-08-13NULL44 Центральная гор.35 Центральная гор.54351435-12019-08-13NULL27 Центральная гор.13 Центральная гор.62221222-12019-10-05NULL36 Правобережная24 Правобережная72231223-12019-10-05NULL36 Правобережная13 Центральная гор.82241224-12019-10-05NULL36 Правобережная22 Правобережная

Но используя ваш код для своей таблицы, у меня выводится 0 строк
Можете глянуть, что не так?
По идее он он должен выдать так:
36 Правобережная,18 Правобережная,24 Правобережная,13 Центральная гор.,22 Правобережная,15 Центральная гор.,27 Центральная гор.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
select DISTINCT  GROUP_CONCAT(DISTINCT c ORDER BY c) 
from 
  (
    select 
      if(t.a=1, @a:=@a+1, @a) n,
      case t.a 
        when 1 then t1.bilo
        when 2 then t1.stalo
        when 3 then t2.bilo
        when 4 then t2.stalo
      end c
    from
    (
      select @a:=0
    ) tt,
    (
      select 1 a union all
      select 2 a union all
      select 3 a union all
      select 4 a
    ) t,
    perehodisrt t1
    INNER  JOIN perehodisrt t2
      on (t1.bilo in (t2.bilo, t2.stalo) or t1.stalo in (t2.bilo, t2.stalo)) 
          and (t1.bilo != t2.bilo and t1.stalo != t2.stalo)
  ) res 
 GROUP BY n



MAPA3OTТо есть, что и почему должно выдать вот это:


Просто 1,2,3,4 по идее, так как остальные значения все повторяются

И скиньте номер карты что-ли, хотя бы на пиво кину за такой запрос)
...
Рейтинг: 0 / 0
Объединить значения из нескольких столбцов и вывести их в строку без повторений
    #39886534
MAPA3OT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zumotamokhimoru,

Если ещё актуально, то стало ещё менее понятно, а как вы получили:
36 Правобережная,18 Правобережная,24 Правобережная,13 Центральная гор.,22 Правобережная,15 Центральная гор.,27 Центральная гор.

У вас в примере, нет связки автор18 Правобережная и 24 Правобережная ни с чем, кроме 36 Правобережная.
авторС 13 ещё хуже, через неё цепляются 2 вообще левых улицы.

Чего-то я не понимаю, видимо. Вам нужны все, кто замешан в этом Содоме?
...
Рейтинг: 0 / 0
Объединить значения из нескольких столбцов и вывести их в строку без повторений
    #39886723
L_I_IG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется нужны просто уникальные адреса, но возможно я ошибаюсь...

Код: sql
1.
2.
select group_concat(bylo order by bylo desc) streets 
from (select bylo from bylo_stalo union select stalo from bylo_stalo)data;
...
Рейтинг: 0 / 0
Объединить значения из нескольких столбцов и вывести их в строку без повторений
    #39899513
zumotamokhimoru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAPA3OT,

В принципе еще даже сейчас актуально)

авторЧего-то я не понимаю, видимо. Вам нужны все, кто замешан в этом Содоме?

Да, так как в список попадают сразу два столбца, то общий список по которому надо сравнивать увеличивается, поэтому там практически вообще всёёё

Возьмём ту же таблицу:
idTP sek nom data primech stalo bilo1 119 2 119-2 2019-08-13 NULL 36 Правобережная 18 Правобережная2 342 1 342-1 2019-08-13 NULL 44 Центральная гор. 35 Центральная гор.3 21 1 21-1 2019-08-04 NULL 15 Центральная гор. 22 Правобережная4 342 2 342-2 2019-08-13 NULL 44 Центральная гор. 35 Центральная гор.5 435 1 435-1 2019-08-13 NULL 27 Центральная гор. 13 Центральная гор.6 222 1 222-1 2019-10-05 NULL 36 Правобережная 24 Правобережная7 223 1 223-1 2019-10-05 NULL 36 Правобережная 13 Центральная гор.8 224 1 224-1 2019-10-05 NULL 36 Правобережная 22 Правобережная


Ищем сначала 36 Правобережная 18 Правобережная, ну так как они первые в список попали, сравниваем, похожие забираем, откидываем повторения, выйдет:

Код: plaintext
36 Правобережная, 18 Правобережная, 24 Правобережная, 13 Центральная гор., 22 Правобережная

но вот список пополнился, теперь идём еще раз по таблице и сравниваем уже с полученными значениями таблицу, выйдет:

Код: plaintext
36 Правобережная, 18 Правобережная, 24 Правобережная, 13 Центральная гор., 22 Правобережная, 15 Центральная гор., 27 Центральная гор.

Вот и всё, 2 и 4 строку оно не затронуло, так как они не пересекаются, но её бы тоже потом вывести отдельной веткой желательно, но мне кажется это вообще не реализуемо
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объединить значения из нескольких столбцов и вывести их в строку без повторений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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