2016-08-02 75 views
1

我试图在MS Access中创建一个传递查询。查询通过ODBC连接到Oracle数据库。MS Access传递查询到Oracle VIA ODBC

我的查询在SQL Developer中运行良好,但它包含CASE (...) END构造。 由于我发现here,Oracle ODBC驱动程序有一个问题end解释。我得到一个错误。

有没有办法解决这个问题?

我的查询:

SELECT 
    CASE 
    WHEN PHORGEN.NR_wniosku LIKE 'PHR%' 
    THEN 'text1' 
    WHEN PHORGEN.NR_wniosku LIKE 'PBR%' 
    THEN 'text2' 
    ELSE 'text3' 
    END field1, 
    CASE 
    WHEN PHORGEN.NR_wniosku IS NULL 
    THEN reklcomp.solution_date 
    ELSE 
     CASE 
     WHEN phorsol.OPIS_ROZWIAZANIA = '3' 
     THEN rekldet.SOLUTION_SENDING_DATE 
     ELSE NVL(
      (SELECT MIN(DATA_KSIEGOWANIA) 
      FROM phorbook 
      WHERE POWOD_KSIEGOWANIA = '1' 
      AND Nr_Wniosku   = PHORGEN.Nr_Wniosku 
     ),rekldet.SOLUTION_SENDING_DATE) 
     END 
    END field2 
FROM rgen 
JOIN reklcomp 
ON rgen.UIDINSTANCEID = reklcomp.UIDINSTANCEID 
JOIN rekldet 
ON rgen.UIDINSTANCEID = rekldet.UIDINSTANCEID 
JOIN reklclient 
ON rgen.UIDINSTANCEID = reklclient.UIDINSTANCEID 
LEFT JOIN phorgen 
ON RGEN.NR_WNIOSKU = PHORGEN.NUMER_OAR 
LEFT JOIN phorsol 
ON PHORGEN.UIDINSTANCEID = phorsol.UIDINSTANCEID 
+0

向我们显示查询,我们可以帮助以另一种方式写它,而不使用'case'' end' –

+0

我编辑了问题并添加了查询。 –

+0

是否有帮助? –

回答

0

我找到了解决方案。这是非常简单的:) Oracle ODBC驱动程序不允许在查询中单词END后面使用分号。所以我删除了传递查询定义中的分号,它起作用了! 谢谢队友的任何答案。

1

您还可以使用解码功能。

我不熟悉ORACLE SQL,但我有一些时间搜索,它应该工作,我认为。

SELECT 
    DECODE(SUBSTR(PHORGEN.NR_wniosku, 1, 3) 
         , 'PHR', 'text1' 
         , 'PBR', 'text2' 
         , 'text3') field1 

    , DECODE(PHORGEN.NR_wniosku 
       , NULL, reklcomp.solution_date 
       , DECODE(phorsol.OPIS_ROZWIAZANIA 
          , '3', rekldet.SOLUTION_SENDING_DATE 
          , NVL((SELECT MIN(DATA_KSIEGOWANIA) 
            FROM phorbook 
            WHERE POWOD_KSIEGOWANIA = '1' 
            AND Nr_Wniosku = PHORGEN.Nr_Wniosku 
           ),rekldet.SOLUTION_SENDING_DATE))) field2 
FROM rgen 
JOIN reklcomp 
ON rgen.UIDINSTANCEID = reklcomp.UIDINSTANCEID 
JOIN rekldet 
ON rgen.UIDINSTANCEID = rekldet.UIDINSTANCEID 
JOIN reklclient 
ON rgen.UIDINSTANCEID = reklclient.UIDINSTANCEID 
LEFT JOIN phorgen 
ON RGEN.NR_WNIOSKU = PHORGEN.NUMER_OAR 
LEFT JOIN phorsol 
ON PHORGEN.UIDINSTANCEID = phorsol.UIDINSTANCEID