У меня есть ситуация, когда мне нужно разделить строки 'n' на группу столбцов. Например, Ниже набора данныхГруппа 'n' строк в столбцах - oracle
COMMENT_TEXT
T1
T2
T3
T4
T5
T6
Ожидаемый результат:
SUN MON TUE
T1 T2 T3
T4 T5 T6
Мой запрос:
SELECT htbp1.comment_text
FROM hxc_time_building_blocks htbp,
hxc_time_building_blocks htbp1
WHERE htbp1.parent_building_block_id = htbp.time_building_block_id
AND htbp1.parent_building_block_ovn = htbp.parent_building_block_ovn
AND htbp.parent_building_block_id = 116166
AND htbp.parent_building_block_ovn = 1
ORDER BY htbp1.time_building_block_id
Есть ли способ, что я могу сделать PIVOT с рядами 'N' и без заполнителя функционировать?
Редактировать: T1/T2/T3 в качестве образцов данных, но в реальности это может быть любой случайный свободный текст или нуль.
SELECT * FROM (SELECT htbp1.comment_text, TO_CHAR (htbp.start_time, 'DY') par_time,
trunc((rownum-1)/7) buck
FROM hxc_time_building_blocks htbp,
hxc_time_building_blocks htbp1,
hxc_timecard_summary hts
WHERE hts.RESOURCE_ID = :p_resource_id
AND TRUNC(hts.STOP_TIME) = TRUNC(:p_wkend_date)
AND htbp1.parent_building_block_id = htbp.time_building_block_id
AND htbp1.parent_building_block_ovn = htbp.parent_building_block_ovn
AND htbp.parent_building_block_id = hts.timecard_id
AND htbp.parent_building_block_ovn = hts.timecard_ovn
ORDER BY htbp1.time_building_block_id) PIVOT(max(comment_text) FOR par_time
IN ('SUN' AS "SUN",
'MON' AS "MON",
'TUE' AS "TUE",
'WED' AS "WED",
'THU' AS "THU",
'FRI' AS "FRI",
'SAT' AS "SAT"));
Когда я добавил еще одну таблицу «hxc_timecard_summary», который является родителем, то данные сходит с ума, но если я использую жестко закодированные параметры, как один в первом, то строки будут появляться штраф.
Ты потрясающий. Огромное спасибо. Второй PIVOT работал, но есть еще одна проблема, с которой я столкнулся. Не могли бы вы посмотреть отредактированный вопрос? – Phani
@Phani, trunc ((rownum-1)/7) buck - вам это не нужно – Multisync
@Phani DY - это зависит от NLS, поэтому будьте осторожны – Multisync