Форум программистов, компьютерный форум, киберфорум
Наши страницы
Oracle
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
StiG64
0 / 0 / 0
Регистрация: 22.10.2014
Сообщений: 6
#1

Столбцы в выборке в одну строку

22.10.2014, 13:21. Просмотров 1631. Ответов 12
Метки нет (Все метки)

Всем здрасте. подскажите как сделать выборку в одну строчку. чтоб одинаковые поля остались в итоговой выборке а разные (улица и город) получились друг за другом, в разных столбцах.
0
Миниатюры
Столбцы в выборке в одну строку  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2014, 13:21
Ответы с готовыми решениями:

Большой текст в БД/Целая страница в одну строку
Доброго времени суток. На данный момент существует отдельная web страница с...

Столбцы в pivot - Исключить из результирующего множества столбцы MONTH и YEAR
есть запрос с pivot: select * from ( select 1 cnt, '55' name, 12 month,...

Оставить только родительские элементы в выборке
Имею промежуточную выборку create view view_name as select id,...

Oracle, лишняя сортировка при выборке из мультииндекса
Добрый день. Допустим у меня есть таблица из колонок a, b c, d, e, f, и в ней 1...

Однотипные скрипты из разных таблиц в одной выборке
День добрый, загнался одной идеей с утра, и пока не получается красиво...

12
Jefe
194 / 194 / 75
Регистрация: 05.06.2013
Сообщений: 549
22.10.2014, 14:40 #2
Разные поля будут всегда одни и те же(улица и город) или могут быть и другие поля разными?

И выложите текстом ваш запрос, результат запроса, и ожидаемый результат, которых хотите получить.
0
StiG64
0 / 0 / 0
Регистрация: 22.10.2014
Сообщений: 6
22.10.2014, 15:03  [ТС] #3
Jefe,
Oracle 11 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
28
29
30
31
32
SELECT  a.id_address
       , a.type_a
       , a.d_start
       , a.d_end
       , a.postal_index
       , a.id_country
       , c.name
       , a.id_region
       , r.name
       , re.name
       , ae.name
       , a.house
       , a.tank
       , a.apartment
       , a.id_station
       , a.okato
       , a.utc
       , a.note
       , a.oktmo
       , a.any_form
 
FROM addresses_ a
     , address_elements_ ae
     , reductions_elements_ re 
     , regions_rf_ r 
     , country_ c
     
WHERE a.id_contractor = 493531
      AND a.id_address = ae.id_address
      AND ae.id_reductions_elem = re.id_reductions_elem
      AND a.id_region = r.id_region
      AND a.id_country = c.id_country
Там может быть до 4 полей: улица, город, район и еще что то... то есть они могут быть все четыре, может быть два поля заполненных. заранее это неизвестно. остальные поля будут одинаковые. в результаты нужно чтоб была одна строка в выборке но в ней были столбцы с улицей с городом и с остальными штуками которые я перечислил если они есть.
0
Jefe
194 / 194 / 75
Регистрация: 05.06.2013
Сообщений: 549
22.10.2014, 15:22 #4
Должно подойти:
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
28
29
30
31
SELECT *a.id_address
* * * *, a.type_a
* * * *, a.d_start
* * * *, a.d_end
* * * *, a.postal_index
* * * *, a.id_country
* * * *, c.name
* * * *, a.id_region
* * * *, WM_CONCAT(r.name)
* * * *, WM_CONCAT(re.name)
* * * *, WM_CONCAT(ae.name)
* * * *, a.house
* * * *, a.tank
* * * *, a.apartment
* * * *, a.id_station
* * * *, a.okato
* * * *, a.utc
* * * *, a.note
* * * *, a.oktmo
* * * *, a.any_form
FROM addresses_ a
* * *, address_elements_ ae
* * *, reductions_elements_ re 
* * *, regions_rf_ r 
* * *, country_ c
WHERE a.id_contractor = 493531
* * * AND a.id_address = ae.id_address
* * * AND ae.id_reductions_elem = re.id_reductions_elem
* * * AND a.id_region = r.id_region
* * * AND a.id_country = c.id_country
GROUP BY a.id_address;
Отметил 3 поля через WM_CONCAT, какое из них четвертое не могу угадать, отметите сами. Должно работать.

Добавлено через 3 минуты
Но тоже будет небольшая загвоздка: одинаковые записи будет дублировать
Как это обойти пока с ходу не могу придумать. Если придумаю - отпишу позже.

Добавлено через 1 минуту
Можно так же попробовать через LISTAGG или XMLAGG
0
StiG64
0 / 0 / 0
Регистрация: 22.10.2014
Сообщений: 6
22.10.2014, 15:39  [ТС] #5
Jefe, спасибо, но у меня почему то ругается на группировку в таком случае... пишет "выражение не является выражением group by". не пойму почему. по идее должен группировать.
0
Jefe
194 / 194 / 75
Регистрация: 05.06.2013
Сообщений: 549
22.10.2014, 15:51 #6
Все остальные неизменные столбцы надо в GROUP BY добавить

Добавлено через 55 секунд
Родилось решение получше. Сейчас прикину как это должно выглядеть.
0
ApXyC
59 / 59 / 24
Регистрация: 14.10.2014
Сообщений: 308
22.10.2014, 15:57 #7
Цитата Сообщение от StiG64 Посмотреть сообщение
Всем здрасте. подскажите как сделать выборку в одну строчку. чтоб одинаковые поля остались в итоговой выборке а разные (улица и город) получились друг за другом, в разных столбцах.
Я может чего не вкуриваю, но ТЗ какое-то унылое.

Приведи хотя бы пример того, что ты ожидаешь на выходе, а то идея попахивает идиотизмом.

Что есть итоговая выборка в твоем запросе?
0
Jefe
194 / 194 / 75
Регистрация: 05.06.2013
Сообщений: 549
22.10.2014, 16:02 #8
Цитата Сообщение от Jefe Посмотреть сообщение
Родилось решение получше. Сейчас прикину как это должно выглядеть.
А к черту решения получше после того как сходил на обед не хочется уже думать.

Вы так и не сказали какое поле будет четвертым, поэтому напишу для трех полей:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
SELECT  a.id_address
       , a.type_a
       , a.d_start
       , a.d_end
       , a.postal_index
       , a.id_country
       , c.name
       , a.id_region
       , WM_CONCAT(DISTINCT(r.name))
       , WM_CONCAT(DISTINCT(re.name))
       , WM_CONCAT(DISTINCT(ae.name))
       , a.house
       , a.tank
       , a.apartment
       , a.id_station
       , a.okato
       , a.utc
       , a.note
       , a.oktmo
       , a.any_form
 
FROM addresses_ a
     , address_elements_ ae
     , reductions_elements_ re 
     , regions_rf_ r 
     , country_ c
     
WHERE a.id_contractor = 493531
      AND a.id_address = ae.id_address
      AND ae.id_reductions_elem = re.id_reductions_elem
      AND a.id_region = r.id_region
      AND a.id_country = c.id_country
 
GROUP BY a.id_address
       , a.type_a
       , a.d_start
       , a.d_end
       , a.postal_index
       , a.id_country
       , c.name
       , a.id_region
       , a.house
       , a.tank
       , a.apartment
       , a.id_station
       , a.okato
       , a.utc
       , a.note
       , a.oktmo
       , a.any_form
Четвертому полю сами добавите WM_CONCAT в SELECT, и вытащите его из GROUP BY
0
StiG64
0 / 0 / 0
Регистрация: 22.10.2014
Сообщений: 6
22.10.2014, 16:57  [ТС] #9
Jefe, это почти то что мне надо)) но мне необходимо чтоб записи сливались не в одид столбец, а оказывались в разных. посмотрите скрин в первом посте. допустим поля Город и Переулок должна быть в одной строке но в разных столбцах, а сейчас они оказываются в одном поле, просто строкой записанной через разделитель.
0
Jefe
194 / 194 / 75
Регистрация: 05.06.2013
Сообщений: 549
22.10.2014, 17:20 #10
Даже посмотрев скрин я вас не понимаю. Покажите(хоть в екселе нарисуйте) по ячейкам как вы хотите что бы это выглядело.

Добавлено через 2 минуты
Цитата Сообщение от StiG64 Посмотреть сообщение
допустим поля Город и Переулок должна быть в одной строке но в разных столбцах
Я это конечно представляю как из:

name
Город
Переулок

сделать:

namename
ГородПереулок

но это уже попахивает чем-то нехорошим если честно...

Добавлено через 1 минуту
Чем больше разных значений в этих столбцах, тем больше столбцов в итоге у вас получится.
Я вас правильно понял и вы действительно хотите именно этого?
0
StiG64
0 / 0 / 0
Регистрация: 22.10.2014
Сообщений: 6
22.10.2014, 17:23  [ТС] #11
Jefe, да. именно это мне и надо. В приложении пример но вы его уже изобразили
0
Миниатюры
Столбцы в выборке в одну строку  
Jefe
194 / 194 / 75
Регистрация: 05.06.2013
Сообщений: 549
22.10.2014, 17:31 #12
Для каждого id_address может быть разное количество записей ведь?
Т.е. узнать конкретное количество столбцов на выходу для любого id_address мы не можем?
Правильно ли я понимаю, что допустим для одного id_address нужно будет например 20 столбцов, для другого - 24 и т.д.?
0
StiG64
0 / 0 / 0
Регистрация: 22.10.2014
Сообщений: 6
22.10.2014, 17:36  [ТС] #13
Jefe, нет. там все легче. тех значений которые надо переносить в одну строку будет до 4 максимум. а вот айди адресса может быть несколько. и для каждого тогда может быть от 2 до 4 значений
0
22.10.2014, 17:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2014, 17:36

Ошибка при выборке ORA-00972: слишком длинный идентификатор
Использую Oracel9i + asp(OleDB) автоматически генерирую SQL код : str = '...

Перенос значений из строк в столбцы. При выполнении по 2-х условий, объединение данных в одну строку. Удаление
Добрый день, подскажите, как решить задачу. Есть выгрузка данных, необходимо...

Удалить строку матрицы и передвинуть ее на одну строку вверх
Как удалить строку из таблицы и передвинуть ее на одну строку вверх?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru