|
|
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
Есть данные Код: 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. 35. 36. 37. Подскажите пожалуйста , как получить данные вида, как правильно написать пивот. чтобы получилась одна строка Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 16:10 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 16:30 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
Как изменить - не знаю, а завернуть можно : select Pack,usercreate, sum(cnt_el),sum (Electron_S),sum(cnt_el), sum(Bumaga_S) from ( select Pack ,decode (UserCreate,'IP',DocumOper,UserCreate) usercreate ,nvl2(Bumaga_S,CntVidDocum,null) cnt_b ,nvl2(Electron_S,CntVidDocum,null) cnt_el ,Bumaga_S ,Electron_S from ( select * -- Pack -- , UserCreate -- , UserConfirm -- , DocumOper -- , VidDocum -- , CntVidDocum -- , sum(SSum) from ( select Pack --Номер пакета , UserCreate -- пользователь создавший документ , UserConfirm -- Пользователь подтвердивший документ , case when UserCreate = 'IP' then UserConfirm else UserCreate end DocumOper -- документы обработанные сотрудником , case when UserCreate = 'IP' then 1 else 0 end VidDocum /*1 Электрон, 0 -бумажный */ , Count(case when UserCreate = 'IP' then 1 else 0 end) CntVidDocum -- Количество , SUM(SSum) SSum --Сумма from ( select 40 as Pack, 'IP' UserCreate, 'IVANOVA' UserConfirm, 123 SSum from dual union all select 40, 'IP', 'IVANOVA', 123 from dual union all select 40, 'IP', 'IVANOVA', 123 from dual union all select 40, 'IP', 'IVANOVA', 123 from dual union all select 40, 'IP', 'IVANOVA', 123 from dual union all select 40, 'IP', 'IVANOVA', 123 from dual union all select 40, 'IP', 'IVANOVA', 345 from dual union all select 40, 'IP', 'IVANOVA', 345 from dual union all select 40, 'IP', 'IVANOVA', 456 from dual union all select 40, 'IVANOVA', 'PETROVA', 55 from dual union all select 40, 'IVANOVA', 'PETROVA', 456 from dual union all select 40, 'IVANOVA', 'PETROVA', 345 from dual union all select 40, 'IVANOVA', 'PETROVA', 234 from dual union all select 40, 'IVANOVA', 'PETROVA', 456 from dual union all select 40, 'IVANOVA', 'PETROVA', 456 from dual ) group by Pack,UserCreate , UserConfirm ) PIVOT (sum(SSum) as S FOR VidDocum IN ('0' as Bumaga, '1' as Electron)) ) )group by Pack,usercreate; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 16:51 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
fortnetа завернуть можно :Усугубил говнокодом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 16:54 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
Elic, Код как код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 17:04 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
Elic , fortnet, Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 19:40 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
Вдруг кому пригодится чтот подобное select * from ( select Pack , case when UserCreate = 'IP' then UserConfirm else UserCreate end DocumOper -- документы обработанные сотрудником , case when UserCreate = 'IP' then 1 else 0 end VidDocum /*1 Электрон, 0 -бумажный */ , case when Pack = 40 then 1 when Pack = 41 then 2 else null end GrRang , ssum from ( select 40 as Pack, 'IP' UserCreate, 'IVANOVA' UserConfirm, 123 SSum from dual union all select 40, 'IP', 'IVANOVA', 123 from dual union all select 40, 'IP', 'PETROVA', 123 from dual union all select 41, 'IP', 'IVANOVA', 123 from dual union all select 41, 'IP', 'IVANOVA', 123 from dual union all select 41, 'IP', 'IVANOVA', 123 from dual union all select 41, 'IP', 'IVANOVA', 345 from dual union all select 40, 'IP', 'IVANOVA', 345 from dual union all select 40, 'IP', 'PETROVA', 456 from dual union all select 40, 'IVANOVA', 'PETROVA', 55 from dual union all select 40, 'IVANOVA', 'PETROVA', 456 from dual union all select 40, 'IVANOVA', 'PETROVA', 345 from dual union all select 41, 'IVANOVA', 'PETROVA', 234 from dual union all select 41, 'IVANOVA', 'PETROVA', 456 from dual union all select 41, 'PETROVA', 'PETROVA', 456 from dual ) ) PIVOT (count(*) as c, sum(SSum) as S FOR VidDocum IN ('1' as Electron, '0' as Bumaga)) ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 20:20 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
Добавил еще промежуточные итоги Код: 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. 35. 36. 37. 38. 39. 40. 41. 42. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 07:21 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
Вдруг кому еще пригодится, развернул еще по пачкам Код: 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. 35. 36. 37. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 08:25 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
maxwait, да успокойся уже.... никому не пригодится... каждый, приходящий сюда - приходит со своей исключительно уникальной, ранее никем нерешаемой проблемой. поэтому поиском не пользуется, а создает свой топик, как это сделал ты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 08:29 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
maxwait Код: plsql 1. 2. Быдлокод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 08:47 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
Elic, почему быдлокод? как не быдлокодить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 11:07 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
maxwaitкак не быдлокодить? Сортир овать в надлежащих для этого местах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 11:09 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
maxwait, Нет смысла сортировать результат и потом применять к нему агрегирующую функцию. Лишняя работа сервера и обманутые ожидания сортированных записей на выходе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 11:16 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
fortnetmaxwait, Лишняя работа сервера есть твердая уверенность, что сервер будет заниматься этой бесполезной лишней работой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 12:25 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
fortnetmaxwait, Нет смысла сортировать результат и потом применять к нему агрегирующую функцию. Лишняя работа сервера и обманутые ожидания сортированных записей на выходе. в качестве иллюстрации Оптимизатор честно отработал сортировку Код: 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. 35. 36. 37. 38. 39. 40. Оптимизатор избавляет сервер от ненужной сортировки Код: 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. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. Но в целом да - писать, ухудшая читабельность и понимание кода, то, что сервер всё одно делать не будет - немного попахивает быдлокодингом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 12:36 |
|
||
|
Проблема с pivot'ом
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Не всегда, да, но не гарантированно... select object_type,count(*) from (select o.*,rownum from user_objects o order by object_type ) group by object_type; Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 17:26 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39401463&tid=1886420]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 206ms |
| total: | 358ms |

| 0 / 0 |
