2016-12-29 6 views
0

Msアクセスで特定のレポートを取得するためのクエリがありました。このクエリーは、データを読み取る機器の動作を再開し、半分の時間を意味する「1/2」または状況に応じた0を与え、ラインを合計する。Oracle SQLクエリの列を集計する方法は?

これでOracle BDで使用する必要があります。私は自分の名前を使用して、選択したcolunsを合計することはできませんいくつかの理由について

Inoperante + standby as parado, 

:私は次の行を除いて、ほぼeveryting翻訳しました。 Oracleで特定の方法がありますか?

全体のクエリがあります:(ここでは素人が、笑笑っていない)

SELECT 

TO_CHAR(e3timestamp,'DD/MM/YYYY') as Data, 

SUM(
(CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE 
    (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE 
    (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE 
(CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN 
(CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 0 ELSE 1/2 END) 
ELSE 
(CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 0 ELSE 1/2 END) 
END) 
    END) 
    END) 
END) 
) 
AS Operando, 

SUM((CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 1/2 ELSE 0 END)) AS TSP, 

SUM(
(CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN 
    (CASE WHEN ARAUCARIA.Status=0 THEN 1/2 ELSE 0 END) 
ELSE 0 END) 
) AS Inoperante, 

SUM(
(CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN 
    (CASE WHEN ARAUCARIA.SB=1 THEN 1/2 ELSE 0 END) 
ELSE 0 END) 
) AS standby, 

--Inoperante + standby as parado, 

SUM(
(CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE 
    (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE 
    (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE 
    (CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN 
    (CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 1/2 ELSE 0 END) 
    ELSE 
    (CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 1/2 ELSE 0 END) 
    END) 
    END) 
    END) 
END) 
) AS Inadequada, 

--Operando + TSP + Inadequada + Inoperante + standby as Total 

FROM ARAUCARIA 

--WHERE ARAUCARIA.E3TIMESTAMP BETWEEN #<%DateIniMed1%># AND #<%DateFimMed1%># 

GROUP BY TO_CHAR(e3timestamp,'DD/MM/YYYY') 

答えて

3

一つは、同じ選択での選択で使用される列の別名を参照することはできません。

With CTE AS (
SELECT 

TO_CHAR(e3timestamp,'DD/MM/YYYY') as Data, 

SUM(
(CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE 
    (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE 
    (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE 
(CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN 
(CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 0 ELSE 1/2 END) 
ELSE 
(CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 0 ELSE 1/2 END) 
END) 
    END) 
    END) 
END) 
) 
AS Operando, 

SUM((CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 1/2 ELSE 0 END)) AS TSP, 

SUM(
(CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN 
    (CASE WHEN ARAUCARIA.Status=0 THEN 1/2 ELSE 0 END) 
ELSE 0 END) 
) AS Inoperante, 

SUM(
(CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN 
    (CASE WHEN ARAUCARIA.SB=1 THEN 1/2 ELSE 0 END) 
ELSE 0 END) 
) AS standby, 

--Inoperante + standby as parado, 

SUM(
(CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE 
    (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE 
    (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE 
    (CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN 
    (CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 1/2 ELSE 0 END) 
    ELSE 
    (CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 1/2 ELSE 0 END) 
    END) 
    END) 
    END) 
END) 
) AS Inadequada, 

--Operando + TSP + Inadequada + Inoperante + standby as Total 

FROM ARAUCARIA 

--WHERE ARAUCARIA.E3TIMESTAMP BETWEEN #<%DateIniMed1%># AND #<%DateFimMed1%># 

GROUP BY TO_CHAR(e3timestamp,'DD/MM/YYYY')) 

SELECT c.* 
    , Inoperante + standby as parado 
    , Operando + TSP + Inadequada + Inoperante + standby as Total 
FROM cte C 

  1. CTEとして共通テーブル式(CTE)

を使用するサブクエリ

  • を使用し、カラム
  • のための全体の式を綴るにあなたのいずれかいます

    サブクエリとして:

    SELECT c.* 
        , Inoperante + standby as parado 
        , Operando + TSP + Inadequada + Inoperante + standby as Total 
    FROM (SELECT TO_CHAR(e3timestamp,'DD/MM/YYYY') as Data, 
         SUM(
    (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE 
        (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE 
        (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE 
    (CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN 
    (CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 0 ELSE 1/2 END) 
    ELSE 
    (CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 0 ELSE 1/2 END) 
    END) 
        END) 
        END) 
    END) 
    ) 
    AS Operando, 
    
    SUM((CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 1/2 ELSE 0 END)) AS TSP, 
    
    SUM(
    (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN 
        (CASE WHEN ARAUCARIA.Status=0 THEN 1/2 ELSE 0 END) 
    ELSE 0 END) 
    ) AS Inoperante, 
    
    SUM(
    (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN 
        (CASE WHEN ARAUCARIA.SB=1 THEN 1/2 ELSE 0 END) 
    ELSE 0 END) 
    ) AS standby, 
    
    --Inoperante + standby as parado, 
    
    SUM(
    (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE 
        (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE 
        (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE 
        (CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN 
        (CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 1/2 ELSE 0 END) 
        ELSE 
        (CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 1/2 ELSE 0 END) 
        END) 
        END) 
        END) 
    END) 
    ) AS Inadequada, 
    
    --Operando + TSP + Inadequada + Inoperante + standby as Total 
    
    FROM ARAUCARIA 
    
    --WHERE ARAUCARIA.E3TIMESTAMP BETWEEN #<%DateIniMed1%># AND #<%DateFimMed1%># 
    
    GROUP BY TO_CHAR(e3timestamp,'DD/MM/YYYY')) C 
    

    私は数式1を複製することを理解させます:P

  • +0

    私は数式全体を綴ることができますが、クエリはすでに私にとって大きなものであることが分かっていました。 2番目の解決策(**サブクエリ**)はうまくいきました。私はそれですべてを再構成できると思います。 3番目の解決策(** CTE **)は私のために働いていませんでした。私は理由を理解しようとしていますが、最も簡単なCTE式でも結果は常に空です。 –

    関連する問題