Solved

Decode and NVL

Posted on 2014-07-18
3
281 Views
Last Modified: 2014-07-21
Hello,

Please assist with understanding the statement below. I understand for example NVL(PE.PAID,0) is stating if pe.paid is null place a zero.

where
 (NVL(DECODE(NVL(PE.OKTOBILL,0),1,DECODE(TO_CHAR(PE.HICFIRST,'YYYY'),'0000', 0, NVL(PE.BILLED,0)),0),0) - NVL(PE.WRITTENOFF,0) - NVL(PE.PAID,0)) >0

Thank you for the help.
0
Comment
Question by:jverasql
3 Comments
 
LVL 76

Assisted Solution

by:slightwv (䄆 Netminder)
slightwv (䄆 Netminder) earned 125 total points
Comment Utility
decode goes like this:
decode(this_value,when_a,return_a,when_b,return_b,else_return_this)


Break it down and indent it to take each piece individually:
 
 (
 	NVL(
 		DECODE(
			--if the nvl on oktobill = 1 then return the value of the decode
 			NVL(PE.OKTOBILL,0),1,
 			DECODE(
				--If the YYYY = '0000' return 0
 				TO_CHAR(PE.HICFIRST,'YYYY'),'0000', 0,
				--else return this
 				NVL(PE.BILLED,0)
 			),0
 		),0
 	)
 	-
 	NVL(PE.WRITTENOFF,0) - NVL(PE.PAID,0)
 ) >0

Open in new window

0
 
LVL 1

Assisted Solution

by:Pooja Katiyar Verma
Pooja Katiyar Verma earned 125 total points
Comment Utility
It will return PE.OKTOBILL 0 if it's data value is null or any other value apart from 1, If it is 1 then it will compare value of PE.HICFIRST in second decode used-  if year part i.e. to_Char(HICFIRST,'YYYY') is '0000' it will return 0, if not then it will compare PE.BILLED with PE.HICFIRST if PE.BILLED is null or value of both columns matches it will return 0.

The result of above value return is then compared in where clause: whether it is greater then 0 or not
0
 
LVL 48

Accepted Solution

by:
PortletPaul earned 250 total points
Comment Utility
perhaps as case expressions will help?
WHERE (
       NVL(
            CASE
                  WHEN NVL(PE.OKTOBILL, 0) = 1 THEN
                        CASE
                              WHEN TO_CHAR(PE.HICFIRST, 'YYYY') = '0000' THEN 0
                              ELSE NVL(PE.BILLED, 0) 
                        END
                  ELSE 0 
            END
        , 0)
      - NVL(PE.WRITTENOFF, 0) - NVL(PE.PAID, 0)
      ) > 0

Open in new window

0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Entering time in Microsoft Access can be difficult. An input mask often bothers users more than helping them and won't catch all typing errors. This article shows how to create a textbox for 24-hour time input with full validation politely catching …
Never store passwords in plain text or just their hash: it seems a no-brainier, but there are still plenty of people doing that. I present the why and how on this subject, offering my own real life solution that you can implement right away, bringin…
Via a live example, show how to take different types of Oracle backups using RMAN.
This video shows how to Export data from an Oracle database using the Original Export Utility.  The corresponding Import utility, which works the same way is referenced, but not demonstrated.

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now