sql select可以使用if吗?

时间:2014-04-08 11:45:04

标签: sql oracle

这是我的sql

SELECT * FROM A
INNER JOIN B ON A.ID = B.ID
INNER JOIN C ON C.ID2 = B.ID2
WHERE ( 
        (
          C.ST_DT >= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss') 
          AND
          C.ST_DT < TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
        ) 
      ) 
OR ( 
     (
          C.ST_DT <= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss') 
          AND
          C.EN_DT > TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
     ) 
   )
AND C.IS_MAIN = '1'

---编辑---------------------------------------- -------------------------------------

我得到了这个结果

ID ID2 ST_DT                EN_DT                TYPE  MOD_DT
---------------------------------------------------------------------------
1  a1  2014/04/01 14:00:00  2014/04/10 14:00:00  0     2014/04/01 10:00:00
2  a1  2014/04/01 14:30:00  2014/04/10 14:00:00  1     2014/04/01 09:00:00
3  b1  2014/03/03 14:30:00  2014/04/15 14:00:00  1     2014/03/08 10:00:00
4  c4  2014/03/05 14:30:00  2014/04/20 14:00:00  1     2014/04/08 10:00:00
5  a1  2014/03/23 14:40:00  2014/03/30 14:00:00  0     2014/03/24 10:00:00

我想得到这个结果

ID ID2 ST_DT                EN_DT                TYPE  MOD_DT
---------------------------------------------------------------------------
3  b1  2014/03/03 14:30:00  2014/04/15 14:00:00  1     2014/03/08 10:00:00
4  c4  2014/03/05 14:30:00  2014/04/20 14:00:00  1     2014/04/08 10:00:00
5  a1  2014/03/23 14:40:00  2014/03/30 14:00:00  0     2014/03/24 10:00:00

原点ID 1和2我不想得到。因为ID 1的MOD_DT < ST_DT和TYPE是0.但我希望得到ID 5。

我可以在......之后添加if吗?谢谢。

2 个答案:

答案 0 :(得分:0)

试试这个,在你的脚本中再添加一个条件。

SELECT * FROM A
INNER JOIN B ON A.ID = B.ID
INNER JOIN C ON C.ID2 = B.ID2
WHERE ( 
        (
          C.ST_DT >= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss') 
          AND
          C.ST_DT < TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
        ) 
      ) 
OR ( 
     (
          C.ST_DT <= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss') 
          AND
          C.EN_DT > TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
     ) 
   )
AND C.IS_MAIN = '1'
and (
        (MOD_DT < ST_DT and TYPE =0)
        OR 
        1=1

    )

答案 1 :(得分:0)

你错过了一个括号。您有X OR Y AND Z作为条件。它必须是(X OR Y) AND Z。你也有额外的括号也无济于事。

SELECT * FROM A
INNER JOIN B ON A.ID = B.ID
INNER JOIN C ON C.ID2 = B.ID2
WHERE (
        (C.ST_DT >= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss') AND C.ST_DT < TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss')) 
        OR 
        (C.ST_DT <= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss') AND C.EN_DT > TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss')) 
    )
    AND C.IS_MAIN = '1'