|
|
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
привет ребята пожалуйста помогите, как оптимально можно вывести все значения из разных колонок в одну колонку? придумал пример что бы было проще объяснить: есть таблица А, где куча колонок, и есть колонки контрагент1, контрагент2, контрагент3, контрагент4 надо вывести список контрагентов участвующих в этой таблице удовлетворяя определенному условию (условие1) на ум приходит только 1 способ через union: Код: sql 1. 2. 3. 4. 5. получается я обращаюсь к одной и той же таблице N раз с одним и тем же условием сделать это с помощью case when не получится потому что 1 запись в таблице А может содержать разных контрагентов (от 0 до N) наверняка есть оптимальное решение о котором я не знаю, что можно с одним обращением к таблице А вывести полный список всех участвующих контрагентов ? ваши варианты и пруфы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 10:45 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
Legushka, терминологически это unpivot и реализуется кросс-джоином на количество полей. а вообще, храните деньги в нормализованном банке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 11:03 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
Legushkaпривет ребята тамбоффскей фольк тябе рябёнок, дятил Код: sql 1. [/quot] потом NULL-ы отфильтруй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 11:19 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
Можно воспользоваться тем, что unnest разворачивает двумерные массивы. Извернуться как-то так: Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 11:24 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
tadmin, модератор тут тоже думать не пробовал. я вам намекну: Код: sql 1. 2. 3. 4. 5. 6. 7. -- т.е. ваши трюки с получением двумерного массива через текст (кррасивые, если учесть что array_agg кажется на агрегированиии массивов должен обломиться) -- тут непришей кобыле хвост (как и потуги скромного модератера изобразить наличие мысли) ну и 2 ТС -- если у вас от 9.3 -- то фильтрацию NULL можете делать на лету: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 11:56 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
qwwq, да нет тут модератора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 12:11 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
tadminqwwq, да нет тут модератора а кто тогда мои эмоциональные воззвания к вам об "подумать" потёр ? кто же, как не модер--хьюманитариус [презираемая разновидность антисапиенса], озабоченный этикетом, но не логикой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 12:37 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
qwwq, Ну, значит есть модератор, просто на шепелявую речь не реагирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 12:57 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
добавилась ложка дегтя: еще одно условие, которое не могу вписать в решение с unnest qwwqWITH A (id, контрагент1,контрагент2,контрагент3,контрагент4,контрагент5) AS (values (0,'контрагент1','контрагент2','контрагент3','контрагент4','контрагент5') ,(1,'контрагент11',NULL,'контрагент31',NULL,'контрагент51') ,(2,'контрагент12','контрагент22','контрагент32','контрагент42','контрагент52') ) select unnest(ARRAY[контрагент1,контрагент2,контрагент3,контрагент4,контрагент5]) from A where id IN (0,1) переводя на используемый пример: если контрагент встретился в любой из записей именно во второй колонке то для этого конрагента надо обязательно смотреть его документ для всех остальных случаев документ знать нельзя по старому способу через union: Код: sql 1. 2. 3. 4. 5. 6. 7. у каждого контрагента есть 1 единственный уникальный документ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 13:29 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
Legushka, По-моему, ваша проблема в том, что вы контрагентов держите в разных полях. Все остальное - последствия. Заведите таблицы "сделка", "контрагенты" и "контрагенты_сделок". У вас не будет никаких проблем ни с null, ни с выборкой контрагентов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 13:53 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
Legushka, версия ПЖ какая ? для >9.3 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. для меньше -- пошейте массив строк , строки -- из 2-х полей с разделителем распарсивайте после unnest. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 14:06 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
версия к сожалению 9.1.14 по поводу контрагентов, это пример был вымышленный, на нем просто было легко объяснять с нормализацией в этой бд норм: там все на ИДшках и отдельных таблицах завязано черезчур даже много этих таблиц, я предпочитаю больше 1С структуру где все справочники в одной таблице (различаются по видам) все доки в другой (различаются по типам) все константы в третьей и тп тут на оборот для каждого чиха была сделана своя таблица, записей в этих таблицах, 100500 отдельные отчеты строятся очень долго. вот и придумал для легкого понимания этих контрагентов которых у нас вообще нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 14:33 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
>вы контрагентов держите в разных полях. обычный случай: какая нить экспертиза например таблица А это может быть док подтверждающий акт проведения экспертизы контрагент1 это заявитель на экспертизу контрагент2 это хозяин объекта контрагент3 это подрядная организация контрагент4 это еще какая нить инспекция участвующая в дележке пирога и тп пример всего лишь плод воображения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 14:41 |
|
||
|
[оптимизация] вывести значения из N разных колонок одной таблицы в одну колонку?
|
|||
|---|---|---|---|
|
#18+
Legushkaверсия к сожалению 9.1.14 пофантазируйте в эту сторону: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. хотя в большинстве случаев от исходного union all наверное можно не отказываться -- там физическихх чтений будет столько же, а вот как дальше -- надо проверять на объёмах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 14:47 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=111&tid=1998006]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 410ms |

| 0 / 0 |
