2016-06-07 103 views
-5

此查询显示6行。 有必要输出2行,这将是所有列Oracle中的优化语句

SELECT 
    D.RIND_S, 
    D.RIND_D, 
    D.CUIIO, 
    D.CAPITOL, 
    D.CUATM, 
    D.ID_MD_S, 
    D.ID_MD_D, 
    SUM(COL1_S) COL1_S, 
    SUM(COL1_D) COL1_D 
    FROM (

    SELECT 

      CASE WHEN D.RIND IN ('1','2','3','4','5','6') THEN D.RIND END RIND_S, 
      CASE WHEN D.RIND NOT IN ('00','--','1','2','3','4','5','6') THEN D.RIND END RIND_D, 
      D.CUIIO AS CUIIO, 
      D.CAPITOL AS CAPITOL, 
      D.CUATM AS CUATM , 
      CASE WHEN D.ID_MD IN (11788,11789,11790,11791,11792,11793)  THEN ID_MD END AS ID_MD_S, 
      CASE WHEN D.ID_MD IN (11795,11796,11797,11798,11799,11800,11801,11802,11803,11804,11805,12521,12238,12240,12241,12524,12242) THEN ID_MD END AS ID_MD_D, 
      CASE WHEN D.RIND IN ('1','2','3','4','5','6')  THEN CIS2.NVAL(D.COL1) END AS COL1_S, 
      CASE WHEN D.RIND NOT IN ('00','--','1','2','3','4','5','6')  THEN CIS2.NVAL(D.COL1) END AS COL1_D 



     FROM 
      CIS2.VW_DATA_ALL D 



     WHERE 
     (D.PERIOADA =:pPERIOADA) AND 
      D.FORM IN (20) AND 
      D.CAPITOL IN (1010) 
      AND D.CUIIO IN (5698200,38985903) 

     ) D 


     GROUP BY 
     D.RIND_S, 
     D.RIND_D, 
     D.ID_MD_S, 
     D.ID_MD_D, 
     D.CUIIO, 
     D.CAPITOL, 
     D.CUATM 


     ORDER BY 
     D.CUATM, 
     D.CUIIO 

此查询显示6行。 有必要输出2行,这将是所有的列。

此查询显示

This query displays.

我需要输出。

I need to output.

+1

如果你已经回答了你自己的问题,那么你可以标记答案接受(点击下面的投票按钮打勾)或者,如果你不认为这个问题将有利于其他用户,你可以删除的问题。 – MT0

回答

0

可能。但他没有斋戒。比较慢。

SELECT 
    A.RIND AS RIND_S, 
    B.RIND AS RIND_D, 
    A.CUIIO, 
    A.CUATM, 
    A.CAPITOL, 
    A.ID_MD AS ID_MD_S, 
    B.ID_MD AS ID_MD_D, 
    SUM(A.COL1) AS COL1_S, 
    SUM(B.COL1) AS COL1_D 
FROM 
(
SELECT 
     D.CUIIO, 
     D.CUATM, 
     D.RIND, 
     D.ID_MD, 
     D.CAPITOL, 
     CIS2.NVAL(D.COL1) AS COL1 
    FROM 
    CIS2.VW_DATA_ALL D 



    WHERE 
    (D.PERIOADA =:pPERIOADA) AND  
     D.FORM IN (20) AND 
     D.CAPITOL IN (1010) AND 
     D.RIND IN ('1','2','3','4','5','6') 
     AND D.CUIIO IN (5698200,38985903) 

) A 
INNER JOIN 
(  
SELECT 
     D.CUIIO, 
     D.CUATM, 
     D.RIND, 
     D.ID_MD, 
     D.CAPITOL, 
     CIS2.NVAL(D.COL1) AS COL1 
    FROM 
     CIS2.VW_DATA_ALL D 


    WHERE 
    (D.PERIOADA =:pPERIOADA) AND  
     D.FORM IN (20) AND 
     D.CAPITOL IN (1010) AND 
     D.RIND NOT IN ('00','--','1','2','3','4','5','6') 
    AND D.CUIIO IN (5698200,38985903) 

) B ON (A.CUIIO=B.CUIIO) 

GROUP BY 
    A.RIND, 
    B.RIND, 
    A.ID_MD, 
    B.ID_MD, 
    A.CUIIO, 
    A.CUATM, 
    A.CAPITOL 
0

我认为更好的办法是做线视图顶部的操作,如果你不知道内嵌视图的内部操作。希望在下面的代码段帮助。我试图得到如下所示的输出。

SELECT MAX(A.RIND_S), 
    MAX(A.RIND_D), 
    A.CUIIO, 
    A.CAPITOL, 
    A.CUATM, 
    MAX(A.ID_MD_S), 
    MAX(A.ID_MD_D), 
    MAX(A.COL1_S), 
    MAX(A.COL1_D) 
FROM 
    (SELECT D.RIND_S, 
    D.RIND_D, 
    D.CUIIO, 
    D.CAPITOL, 
    D.CUATM, 
    D.ID_MD_S, 
    D.ID_MD_D, 
    SUM(COL1_S) COL1_S, 
    SUM(COL1_D) COL1_D 
    FROM 
    (SELECT 
     CASE 
     WHEN D.RIND IN ('1','2','3','4','5','6') 
     THEN D.RIND 
     END RIND_S, 
     CASE 
     WHEN D.RIND NOT IN ('00','--','1','2','3','4','5','6') 
     THEN D.RIND 
     END RIND_D, 
     D.CUIIO AS CUIIO, 
     D.CAPITOL AS CAPITOL, 
     D.CUATM AS CUATM , 
     CASE 
     WHEN D.ID_MD IN (11788,11789,11790,11791,11792,11793) 
     THEN ID_MD 
     END AS ID_MD_S, 
     CASE 
     WHEN D.ID_MD IN (11795,11796,11797,11798,11799,11800,11801,11802,11803,11804,11805,12521,12238,12240,12241,12524,12242) 
     THEN ID_MD 
     END AS ID_MD_D, 
     CASE 
     WHEN D.RIND IN ('1','2','3','4','5','6') 
     THEN CIS2.NVAL(D.COL1) 
     END AS COL1_S, 
     CASE 
     WHEN D.RIND NOT IN ('00','--','1','2','3','4','5','6') 
     THEN CIS2.NVAL(D.COL1) 
     END AS COL1_D 
    FROM CIS2.VW_DATA_ALL D 
    WHERE (D.PERIOADA =:pPERIOADA) 
    AND D.FORM  IN (20) 
    AND D.CAPITOL IN (1010) 
    AND D.CUIIO  IN (5698200,38985903) 
    ) D 
    GROUP BY D.RIND_S, 
    D.RIND_D, 
    D.ID_MD_S, 
    D.ID_MD_D, 
    D.CUIIO, 
    D.CAPITOL, 
    D.CUATM 
)A 
GROUP BY A.CUIIO, 
    A.CAPITOL, 
    A.CUATM;