Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Chris Miller on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Case Question

Status
Not open for further replies.

Zeroanarchy

Technical User
Jun 11, 2001
630
AU

Hi thanks for taking the time to look at this. I am interested to know if this is possible in a Oracle query.

What I am trying to do is create two columns and the second column is based on the first columns value.

So in the select query I have hte following. The issue is that Oracle tells me the "Covered" is an invalid identifier.

Code:
CASE WHEN BENEFITLIMIT.Payable = Null
THEN 'No'
WHEN BENEFITLIMIT.URL = Null
THEN 'No'
ELSE 'Yes'
END Covered,

CASE WHEN Covered = 'No'
THEN 'Blank'
ELSE LPS_SERVICES.WAITINGPERIODTIME
END WaitingPeriod

All help appreciated.

Cheers

[afro]ZeroAnarchy
Experience is a wonderful thing. It enables you to recognize a mistake
when you make it again.

 
Zero,

Yes, you can achieve what you want with a little "trick":
Code:
SELECT Covered
      ,CASE WHEN Covered = 'No'
            THEN 'Blank'
            ELSE WAITINGPERIODTIME
       END WaitingPeriod
  FROM (SELECT CASE WHEN BENEFITLIMIT.Payable = Null
                    THEN 'No'
                    WHEN BENEFITLIMIT.URL = Null
                    THEN 'No'
                    ELSE 'Yes'
               END Covered
              ,WAITINGPERIODTIME
          FROM LPS_SERVICES...);
Let us know how this works for you.



[santa]Mufasa
(aka Dave of Sandy, Utah, USA)
[I provide low-cost, remote Database Administration services: www.dasages.com]
 
Thanks Mufasa for your help, I am getting a "missing right parenthesis" any ideas??

Code:
SELECT Covered
      ,CASE WHEN Covered = 'No'
            THEN 'Blank'
            ELSE WAITINGPERIODTIME
       END WaitingPeriod
  FROM (SELECT CASE WHEN BENEFITLIMIT.Payable = Null
                    THEN 'No'
                    WHEN BENEFITLIMIT.URL = Null
                    THEN 'No'
                    ELSE 'Yes'
               END Covered,
	LPS_SERVICES.LSERVICENAME,
	BENEFITLIMIT.Payable, 
	BENEFITLIMIT.SSTATENAME, 
	BENEFITLIMIT.SITEPREFIX, 
	BENEFITLIMIT.LPRODUCTTYPE, 
	BENEFITLIMIT.URL
FROM  
		BENEFITLIMIT
		LPS_SERVICES

RIGHT JOIN LPS_SERVICES 

WHERE 
BENEFITLIMIT.SORT_ORDER	= LPS_SERVICES.SORT_ORDER

Thanks

[afro]ZeroAnarchy
Experience is a wonderful thing. It enables you to recognize a mistake
when you make it again.

 
Yes, Zero...as the error message says, you are "missing (a)right parenthesis"...at least I cannot see one anywhere. Put a right paren at the end, try it again, and let us know the results.

[santa]Mufasa
(aka Dave of Sandy, Utah, USA)
[I provide low-cost, remote Database Administration services: www.dasages.com]
 
WHEN BENEFITLIMIT.Payable = Null
In my version of Oracle, this would never result in a true,
surely it would be

Code:
WHEN BENEFITLIMIT.Payable IS Null

Or maybe this is a functionality I wasn't aware of?

 
Jim, you are absolutely correct...Since I was focussing on the CASE statement, I failed to focus on other aspects. When comparing a value (in Oracle) to NULL, one must use IS NULL and IS NOT NULL for correct results.

[santa]Mufasa
(aka Dave of Sandy, Utah, USA)
[I provide low-cost, remote Database Administration services: www.dasages.com]
 
Thanks Dave (I thought i was going mad and had missed some new functionality :lol:)
 
Thanks Mufasa and Jim for your help, I seem to still be a little stuck on this. Unfortunetly I am now getting a
"FROM Keyword not found where expected."

Code:
SELECT Covered,
       CASE WHEN Covered = 'No'
            THEN 'Blank'
            ELSE WAITINGPERIODTIME
       END WaitingPeriod
  FROM  (SELECT CASE WHEN BENEFITLIMIT.Payable is Null
                    THEN 'No'
                    WHEN BENEFITLIMIT.URL is Null
                    THEN 'No'
                    ELSE 'Yes'
               END Covered,
    LPS_SERVICES.LSERVICENAME,
    BENEFITLIMIT.Payable, 
    BENEFITLIMIT.SSTATENAME, 
    BENEFITLIMIT.SITEPREFIX, 
    BENEFITLIMIT.LPRODUCTTYPE, 
    BENEFITLIMIT.URL
FROM  
    BENEFITLIMIT
    LPS_SERVICES
RIGHT JOIN 
    LPS_SERVICES 
WHERE 
    BENEFITLIMIT.SORT_ORDER    =LPS_SERVICES.SORT_ORDER)

[afro]ZeroAnarchy
Experience is a wonderful thing. It enables you to recognize a mistake
when you make it again.

 
Thanks guys looks like I have solved the problem, missing comar. I should pay more attention to detail.

Cheers


[afro]ZeroAnarchy
Experience is a wonderful thing. It enables you to recognize a mistake
when you make it again.

 
Ok sorry looks like I still have an error that I can not solve. "From Keyword not found where expected" Line "13"
Line 13 is Bold.

Thanks in advance.

Here is the code
Code:
SELECT
	    LPS_SERVICES.LSERVICENAME,
	    BENEFITLIMIT.Payable,
		LPS_SERVICES.WAITINGPERIODTIME,
	    BENEFITLIMIT.SSTATENAME,
	    BENEFITLIMIT.SITEPREFIX,
	    BENEFITLIMIT.LPRODUCTTYPE,
	    BENEFITLIMIT.URL,
		Covered,
		CASE WHEN Covered = 'No'
	            THEN 'Blank'
	            ELSE LPS_SERVICES.WAITINGPERIODTIME [b]
	       END LPS_SERVICES.WAITINGPERIODTIME
[/b]	  FROM  (SELECT CASE WHEN BENEFITLIMIT.Payable is Null
	                    THEN 'No'
	                    WHEN BENEFITLIMIT.URL is Null
	                    THEN 'No'
	                    ELSE 'Yes'
	               END Covered
FROM
        BENEFITLIMIT
RIGHT OUTER JOIN
LPS_SERVICES ON BENEFITLIMIT.SORT_ORDER	= LPS_SERVICES.SORT_ORDER
WHERE
LPS_SERVICES.DISPLAY	=	'Y');

[afro]ZeroAnarchy
Experience is a wonderful thing. It enables you to recognize a mistake
when you make it again.

 
change
Code:
END LPS_SERVICES.WAITINGPERIODTIME

to
Code:
END WAITINGPERIODTIME
you might also consider

Code:
CASE Covered WHEN  'No'
                THEN 'Blank'
                ELSE LPS_SERVICES.WAITINGPERIODTIME END
No need for a searched case expression in this instance

HTH
Jim
 
It looks like you are creating an inline view and passing the info back to an outer Select. If so, format is like.

SELECT
LSERVICENAME,
Payable,
WAITINGPERIODTIME,
SSTATENAME,
SITEPREFIX,
LPRODUCTTYPE,
URL,
Covered,
CASE WHEN Covered = 'No'
THEN 'Blank'
ELSE WAITINGPERIODTIME
END WAITINGPERIODTIME2
FROM
(SELECT
LPS_SERVICES.LSERVICENAME,
BENEFITLIMIT.Payable,
LPS_SERVICES.WAITINGPERIODTIME,
BENEFITLIMIT.SSTATENAME,
BENEFITLIMIT.SITEPREFIX,
BENEFITLIMIT.LPRODUCTTYPE,
BENEFITLIMIT.URL,
CASE WHEN BENEFITLIMIT.Payable is Null
THEN 'No'
WHEN BENEFITLIMIT.URL is Null
THEN 'No'
ELSE 'Yes'
END Covered
FROM
BENEFITLIMIT
RIGHT OUTER JOIN
LPS_SERVICES ON BENEFITLIMIT.SORT_ORDER = LPS_SERVICES.SORT_ORDER
WHERE
LPS_SERVICES.DISPLAY = 'Y');
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top