I have a data of all the cost for each month. For example,
I have table of cost for each month
x
+--------+--------+-----+--------+--------+
| Jan | Feb | Mar | Apr | May |
+--------+--------+-----+--------+--------+
| 899.20 | 0 | 0 | 0 | 899.20 |
| 439.38 | 485.29 | 0 | 0 | 482.29 |
+--------+--------+-----+--------+--------+
Then what I want in the output for every month that is = ‘0’, it will get the data in the previous month and so on until it’s not equal = ‘0’
Is this possible using oracle sql or using xml.
I tried the oracle sql query below, for example is I want the value of April to be = 899.20
I used the case when condition,
case
when Apr = '0' then Mar
when Mar = '0' then Feb
when Feb = '0' then Jan
else Apr
end
and in XML is the if else condition
<?xdofx:if apr = '0' then mar
else if mar = '0' then feb
else if feb = '0' then jan
else apr
end if?>
But both conditions I know didn’t work. Please help
Thank you
Advertisement
Answer
You can use:
SELECT Jan,
CASE WHEN Feb > 0 THEN Feb
ELSE Jan END
AS Feb,
CASE WHEN Mar > 0 THEN Mar
WHEN Feb > 0 THEN Feb
ELSE Jan END
AS Mar,
CASE WHEN Apr > 0 THEN Apr
WHEN Mar > 0 THEN Mar
WHEN Feb > 0 THEN Feb
ELSE Jan END
AS Apr,
CASE WHEN May > 0 THEN May
WHEN Apr > 0 THEN Apr
WHEN Mar > 0 THEN Mar
WHEN Feb > 0 THEN Feb
ELSE Jan END
AS May
FROM table_name
Which, for the sample data:
CREATE TABLE table_name ( Jan, Feb, Mar, Apr, May ) AS
SELECT 899.20, 0, 0, 0, 899.20 FROM DUAL UNION ALL
SELECT 439.38, 485.29, 0, 0, 482.29 FROM DUAL;
Outputs:
JAN | FEB | MAR | APR | MAY -----: | -----: | -----: | -----: | -----: 899.2 | 899.2 | 899.2 | 899.2 | 899.2 439.38 | 485.29 | 485.29 | 485.29 | 482.29
db<>fiddle here