Currently building a report and need to pivot my data to get the columns and rows reversed. Data is currently displayed as such:
WEEK_DATE | HOTEL | AIR_FARE |
---|---|---|
22-Aug | 0 | 0 |
23-Aug | 0 | 0 |
24-Aug | 0 | 0 |
25-Aug | 102 | 0 |
26-Aug | 0 | 0 |
Desired format:
Expense_Category | 22-Aug | 23-Aug | 24-Aug | 25-Aug | 26-Aug |
---|---|---|---|---|---|
HOTEL | 0 | 0 | 0 | 102 | 0 |
AIR FARE | 0 | 0 | 0 | 0 | 0 |
Query:
SELECT * FROM (
SELECT
TO_CHAR(TRUNC(exr.expense_report_date, 'D'),'MM/DD') Week_Date,
(SELECT CASE when ee.REIMBURSABLE_AMOUNT is null then 0 else ee.REIMBURSABLE_AMOUNT end as "RE_1"
FROM exm_expense_reports exr, exm_expenses ee, exm_expense_types eet
WHERE exr.expense_report_id = ee.expense_report_id
and ee.EXPENSE_TYPE_ID = eet.EXPENSE_TYPE_ID
and to_char(EE.END_DATE, 'MM/DD') = to_char(TRUNC(exr.expense_report_date, 'D'),'MM/DD')
and EET.name = 'Hotel'
and exr.EXPENSE_REPORT_NUM = 'EXP000009057987') "HOTEL",
(SELECT CASE when ee.REIMBURSABLE_AMOUNT is null then 0 else ee.REIMBURSABLE_AMOUNT end as "RE_1"
FROM exm_expense_reports exr, exm_expenses ee, exm_expense_types eet
WHERE exr.expense_report_id = ee.expense_report_id
and ee.EXPENSE_TYPE_ID = eet.EXPENSE_TYPE_ID
and to_char(EE.END_DATE, 'MM/DD') = to_char(TRUNC(exr.expense_report_date, 'D'),'MM/DD')
and EET.name = 'Air Fare'
and exr.EXPENSE_REPORT_NUM = 'EXP000009057987') "AIR FARE"
from exm_expense_reports exr WHERE exr.EXPENSE_REPORT_NUM = 'EXP000009057987'
UNION
SELECT
TO_CHAR(TRUNC(exr.expense_report_date, 'D')+1,'MM/DD') Week_Date,
(SELECT CASE when ee.REIMBURSABLE_AMOUNT is null then 0 else ee.REIMBURSABLE_AMOUNT end as "RE_1"
FROM exm_expense_reports exr, exm_expenses ee, exm_expense_types eet
WHERE exr.expense_report_id = ee.expense_report_id
and ee.EXPENSE_TYPE_ID = eet.EXPENSE_TYPE_ID
and to_char(EE.END_DATE, 'MM/DD') = to_char(TRUNC(exr.expense_report_date, 'D')+1,'MM/DD')
and EET.name = 'Hotel'
and exr.EXPENSE_REPORT_NUM = 'EXP000009057987') "HOTEL",
(SELECT CASE when ee.REIMBURSABLE_AMOUNT is null then 0 else ee.REIMBURSABLE_AMOUNT end as "RE_1"
FROM exm_expense_reports exr, exm_expenses ee, exm_expense_types eet
WHERE exr.expense_report_id = ee.expense_report_id
and ee.EXPENSE_TYPE_ID = eet.EXPENSE_TYPE_ID
and to_char(EE.END_DATE, 'MM/DD') = to_char(TRUNC(exr.expense_report_date, 'D')+1,'MM/DD')
and EET.name = 'Air Fare'
and exr.EXPENSE_REPORT_NUM = 'EXP000009057987') "AIR FARE"
from exm_expense_reports exr WHERE exr.EXPENSE_REPORT_NUM = 'EXP000009057987'
(Date parameter repeated for 6 total unions)
When testing in Oracle I've gotten "ORA-01748: only simple column names allowed here" error. I'm new to pivots so not sure I'm doing this correctly. Any help would be appreciated, thank you!