Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / формирование столбцов из строк / 10 сообщений из 10, страница 1 из 1
21.08.2017, 19:41
    #39508566
aldihan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формирование столбцов из строк
Добрый день!
Имеется таблица где есть такие данные как
|Тип сотрудника| Пол сотрудника | Наименование плана по продажам |Сумма плана по продажам |
необходимо транспонировать строк в столбцы таким образом:
|Тип сотрудника| Пол сотрудника | Наименование ППП #1 сумма ППП | Наименование ППП #2 сумма ППП | Наименование ППП сумма ППП #3 | Наименование ППП сумма ППП #4 |

и тд. планов по продажам где то 10 и с условием:
1. нужно брать только те планы по продажам где есть сумма плана по продажам
2. заранее не известно какие планы по продажам будут включены в запрос
...
Рейтинг: 0 / 0
21.08.2017, 20:17
    #39508577
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формирование столбцов из строк
Хороший тон - предоставить тестовые данные.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with t as 
(
  select 1 t, 'm' sex, 'plan1' plan, 0 sum1 from dual union all
  select 1 t, 'f' sex, 'plan2' plan, null sum1 from dual union all
  select 2 t, 'm' sex, 'plan1' plan, 2 sum1 from dual union all
  select 1 t, 'm' sex, 'plan2' plan, 3 sum1 from dual union all
  select 5 t, 'f' sex, 'plan1' plan, 4 sum1 from dual union all
  select 1 t, 'm' sex, 'plan3' plan, 5 sum1 from dual        
)
select t, sex,
       case when plan = 'plan1' then sum1 else null end "plan1",
       case when plan = 'plan2' then sum1 else null end "plan2",
       case when plan = 'megaplan' then sum1 else null end "megaplan"
from t
where nvl(sum1, 0) > 0



Далее детализируйте свое безумное (как и все учебные) задание.
...
Рейтинг: 0 / 0
22.08.2017, 11:32
    #39508674
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формирование столбцов из строк
aldihan,

Еще можете pivot посмотреть .... тоже хорошо подходит под задачу.

P.S. А почему столько академических задач появилось в преддверии 1 сентября? Досдача хвостов или финальная пересдача?
...
Рейтинг: 0 / 0
23.08.2017, 08:05
    #39509103
aldihan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формирование столбцов из строк
удалось мне вывести вот такую таблицу
VALC1 VALC2 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 офицер ж 150000 100000 50000 офицер м 200000 200000 50000 123456 Старшый офицер м 280000 350000 50000 Руководитель м 720000 350000 50000 Менеджер ж 400000 100000 50000 200000 60000 Менеджер м 600000 200000 50000 200000 Заместитель начальника управления м 720000 350000 50000 Начальник м 280000 350000 50000
теперь нужен еще один селект который выведет без пустых столбцов, код sql представлен ниже

Код: 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.
Select de.ValName1
      ,de.ValName2

      ,sum((case when rnk.ad = 1 and rnk.ISN = de.ValName3 then de.valName4 end)) P1
      ,sum((case when rnk.ad = 2 and rnk.ISN = de.ValName3 then de.valName4 end)) P2
      ,sum((case when rnk.ad = 3 and rnk.ISN = de.ValName3 then de.valName4 end)) P3
      ,sum((case when rnk.ad = 4 and rnk.ISN = de.ValName3 then de.valName4 end)) P4
      ,sum((case when rnk.ad = 5 and rnk.ISN = de.ValName3 then de.valName4 end)) P5
      ,sum((case when rnk.ad = 6 and rnk.ISN = de.ValName3 then de.valName4 end)) P6
      ,sum((case when rnk.ad = 7 and rnk.ISN = de.ValName3 then de.valName4 end)) P7
      ,sum((case when rnk.ad = 8 and rnk.ISN = de.ValName3 then de.valName4 end)) P8
      ,sum((case when rnk.ad = 9 and rnk.ISN = de.ValName3 then de.valName4 end)) P9
      ,sum((case when rnk.ad = 10 and rnk.ISN = de.ValName3 then de.valName4 end)) P10

    from Docempl  de , (Select distinct ValName3
                              from  Docempl
                       )  GP
                    ,(select tt.ID, tt.ParentID, rank ()over (order by id) ad      -- tt.ID = ValName3
                                 from sprv tt) rnk
                 
where de.ValName3 = GP.ValName3

 group by de.ValName1, de.ValName2
 order by 1 desc, 2

  
...
Рейтинг: 0 / 0
23.08.2017, 08:17
    #39509104
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формирование столбцов из строк
aldihanтеперь нужен еще один селект который выведет без пустых столбцов, код sql представлен нижеПросто удали их из запроса.
...
Рейтинг: 0 / 0
23.08.2017, 11:02
    #39509173
aldihan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формирование столбцов из строк
Elic, удалиь их я не могу
...
Рейтинг: 0 / 0
23.08.2017, 11:14
    #39509179
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формирование столбцов из строк
В запросе не может быть переменное количество столбцов в зависимости от данных.
...
Рейтинг: 0 / 0
23.08.2017, 13:36
    #39509295
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формирование столбцов из строк
aldihan,

Код: 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.
Select de.ValName1
      ,de.ValName2

      ,sum((case when rnk.ad = 1 and rnk.ISN = de.ValName3 then de.valName4 end)) P1
      ,sum((case when rnk.ad = 2 and rnk.ISN = de.ValName3 then de.valName4 end)) P2
      ,sum((case when rnk.ad = 3 and rnk.ISN = de.ValName3 then de.valName4 end)) P3
      ,sum((case when rnk.ad = 4 and rnk.ISN = de.ValName3 then de.valName4 end)) P4
      ,sum((case when rnk.ad = 5 and rnk.ISN = de.ValName3 then de.valName4 end)) P5
      ,sum((case when rnk.ad = 6 and rnk.ISN = de.ValName3 then de.valName4 end)) P6
      ,sum((case when rnk.ad = 7 and rnk.ISN = de.ValName3 then de.valName4 end)) P7
      ,sum((case when rnk.ad = 8 and rnk.ISN = de.ValName3 then de.valName4 end)) P8
      ,sum((case when rnk.ad = 9 and rnk.ISN = de.ValName3 then de.valName4 end)) P9
      ,sum((case when rnk.ad = 10 and rnk.ISN = de.ValName3 then de.valName4 end)) P10

    from Docempl  de , (Select distinct ValName3
                              from  Docempl
                       )  GP
                    ,(select tt.ID, tt.ParentID, rank ()over (order by id) ad      -- tt.ID = ValName3
                                 from sprv tt) rnk
                 
where de.ValName3 = GP.ValName3

 group by de.ValName1, de.ValName2
 order by 1 desc, 2


А что Вы этим хотели сказать?
...
Рейтинг: 0 / 0
23.08.2017, 13:41
    #39509304
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формирование столбцов из строк
aldihanElic, удалиь их я не могу

Тогда заполни 0-ми и они станут не пустыми
...
Рейтинг: 0 / 0
28.08.2017, 17:59
    #39511842
aldihan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формирование столбцов из строк
MaximaXXL, так и сделал
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / формирование столбцов из строк / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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