How can i put IF ELSE CONDITION in Oracle query?

只愿长相守 提交于 2019-12-02 09:06:55

this query will help you to get your desired result

SELECT id
    ,name
    ,faculty
FROM A
WHERE faculty IN ('IT', 'Business')

How can I select data from table B where faculty should be IT and if there are multiple it should get with max ID. AND if there is no any IT, it should be get business?

This will get the row with the maximum ID that is in IT and if there are no IT rows then Business

SELECT *
FROM   (
  SELECT A.id,
         A.idB,
         A.name,
         A.faculty,
         B.name AS bname
  FROM   A
         INNER JOIN B
         ON ( A.idB = B.id )
  WHERE  A.faculty IN ( 'IT', 'Business' )
  ORDER BY
         DECODE( A.faculty, 'IT', 1, 'Business', 2 ),
         A.id DESC
)
WHERE  ROWNUM = 1;

If you want the top row from each group then:

SELECT id,
       idB,
       name,
       faculty,
       bname
FROM   (
  SELECT A.id,
         A.idB,
         A.name,
         A.faculty,
         B.name AS bname,
         ROW_NUMBER() OVER (
           PARTITION BY A.faculty
           ORDER BY     A.id DESC
         ) AS rn
  FROM   A
         INNER JOIN B
         ON ( A.idB = B.id )
  WHERE  A.faculty IN ( 'IT', 'Business' )
)
WHERE  rn = 1;
SELECT A.*,T.Name
FROM 
TableA A
INNER JOIN
(
SELECT MAX(A.id) AS id,A.FACULTY,B.NAME,
  ROW_NUMBER() OVER (PARTITION BY B.NAME ORDER BY MAX(A.id) DESC) AS RN FROM TableA A
INNER JOIN TableB B
ON A.idB=B.id
WHERE faculty IN ('IT', 'Business')
GROUP BY A.FACULTY,B.NAME
) T
ON A.id = T.id
AND A.FACULTY = T.FACULTY
WHERE T.RN=1

Output

ID  IDB  NAME   FACULTY   NAME
8   1    H      IT        First
15  2    G      Business  Second

Demo

http://sqlfiddle.com/#!4/98b84/24

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!