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

и тд. планов по продажам где то 10 и с условием:
1. нужно брать только те планы по продажам где есть сумма плана по продажам
2. заранее не известно какие планы по продажам будут включены в запрос
...
Рейтинг: 0 / 0
формирование столбцов из строк
    #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
формирование столбцов из строк
    #39508674
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aldihan,

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

P.S. А почему столько академических задач появилось в преддверии 1 сентября? Досдача хвостов или финальная пересдача?
...
Рейтинг: 0 / 0
формирование столбцов из строк
    #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
формирование столбцов из строк
    #39509104
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aldihanтеперь нужен еще один селект который выведет без пустых столбцов, код sql представлен нижеПросто удали их из запроса.
...
Рейтинг: 0 / 0
формирование столбцов из строк
    #39509173
aldihan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic, удалиь их я не могу
...
Рейтинг: 0 / 0
формирование столбцов из строк
    #39509179
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В запросе не может быть переменное количество столбцов в зависимости от данных.
...
Рейтинг: 0 / 0
формирование столбцов из строк
    #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
формирование столбцов из строк
    #39509304
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aldihanElic, удалиь их я не могу

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


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