Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

How to use case statement in where clause?

976758Sep 18 2015 — edited Sep 18 2015

Dear Experts,

I am using case statement in where clause, following is my query.

SELECT DISTINCT cd.as_of_date, cd.disclosureid, ds.sec_short_name,

                c.numberofissuedshares, c.treasurystock, c.issuedshares,

                c.sharesoutstanding, cd.companyid, c.stockcode "Stock Code",

                c.nameeng "Company Name", cd.disclosuredate "Disclosure Date",

                cd.fullname, cd.direct, cd.indirect, cd.lastupdateon,

                cd.directindirect

           FROM dwh_companiesdisclosure cd,

                dwh_companiesinfo c,

                dwh_securities_cd ds,

                dwh_sector_cd dsec

          WHERE cd.companyid = c.companyid

            AND ds.security_cd = c.stockcode

            AND ds.sector_cd = dsec.code

            AND (cd.disclosureid, cd.lastupdateon) IN (

                   SELECT *

                     FROM (SELECT   disclosureid, lastupdateon

                               FROM dwh_companiesdisclosure

                              WHERE companyid = COMPANYID

                                AND lastupdateon <=

                                          TO_DATE ('09/10/2015', 'MM/DD/YYYY')

                           GROUP BY disclosureid, lastupdateon

                           ORDER BY 2 DESC)

                    WHERE ROWNUM = 1)

            AND (c.companyid, c.as_of_date) IN (

                      SELECT   companyid, MAX (as_of_date)

                          FROM dwh_companiesinfo

                         WHERE as_of_date <=

                                          TO_DATE ('09/10/2015', 'MM/DD/YYYY')

                      GROUP BY companyid)

--and C.Companyid=174

            AND ds.sector_cd  in ( case  :sector

                                     when 'MARKET IXP' then ((DS.board_cd='REG')  and (code<>'9900'))

                                     when 'Total Market' then ((ds.board_cd='REG') or (code='9900')) 

                                    else

                                      ds.sector_cd

                                      end)

            AND ds.security_cd = NVL (:security, ds.security_cd)

       ORDER BY 1 DESC

when i am using this query its throwing error like missing right parenthesis.

could any one help me on this.

thanks in advance.

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Oct 16 2015
Added on Sep 18 2015
2 comments
462 views