복붙노트

[SQL] 같은보기에서 다른 열을 계산하는 계산 된 열을 사용하는 방법

SQL

같은보기에서 다른 열을 계산하는 계산 된 열을 사용하는 방법

나는 당신이이 질문에 도움이 될 수 있습니다 기대하고있다. 나는 오라클 SQL (이 뷰에 대한 SQL Developer를) 사용하고 있습니다 ...

나는 다음과 같은 열이있는 테이블이있는 경우 :

내보기에 나는이

Select  
ColumnA,
ColumnB,
ColumnA + ColumnB As calccolumn1

지금이 시점에서, 나는 calccolumn1를 사용하려면 하지만 난 그냥 말할 수 없다 ...

Select  
ColumnA,
ColumnB,
ColumnA + ColumnB As calccolumn1
calccolumn1 / ColumnC as calccolumn2

나는 어떤 종류의 필요 subquery..but 나는 당신의 도움을 필요로하는 곳이 가정입니다 ... 어떻게 단어 쿼리는 그래서 동일한 쿼리 내의 다른 계산에 calccolumn1을 사용할 수있는 것? 그것은 다음의 경우 또는 케이스 일 수 있지만, 일부 파생 된 번호입니다 최하위 있습니다.

해결법

  1. ==============================

    1.당신은 중첩 된 쿼리를 사용할 수 있습니다 :

    당신은 중첩 된 쿼리를 사용할 수 있습니다 :

    Select
      ColumnA,
      ColumnB,
      calccolumn1,
      calccolumn1 / ColumnC as calccolumn2
    From (
      Select
        ColumnA,
        ColumnB,
        ColumnC,
        ColumnA + ColumnB As calccolumn1
      from t42
    );
    

    범 값 3, 4, 5 행으로 :

       COLUMNA    COLUMNB CALCCOLUMN1 CALCCOLUMN2
    ---------- ---------- ----------- -----------
             3          4           7         1.4
    

    당신은 또한 그냥 정말 비싼 뭔가를하고있는 게 아니라면 (함수 호출을 통해 말), 제 1 계산을 반복 할 수 있습니다 :

    Select
      ColumnA,
      ColumnB,
      ColumnA + ColumnB As calccolumn1,
      (ColumnA + ColumnB) / ColumnC As calccolumn2
    from t42; 
    
       COLUMNA    COLUMNB CALCCOLUMN1 CALCCOLUMN2
    ---------- ---------- ----------- -----------
             3          4           7         1.4 
    
  2. ==============================

    2.에서의 SQL 서버

    에서의 SQL 서버

    당신이 사용하는 크로스 적용 할 수있는

    Select
      ColumnA,
      ColumnB,
      c.calccolumn1 As calccolumn1,
      c.calccolumn1 / ColumnC As calccolumn2
    from t42
    cross apply (select (ColumnA + ColumnB) as calccolumn1) as c
    
  3. ==============================

    3.당신은 "동일한 쿼리 수준"계산 열을 참조 할 경우에 당신은 CROSS은 (오라클 12C) 적용 사용할 수 있습니다 :

    당신은 "동일한 쿼리 수준"계산 열을 참조 할 경우에 당신은 CROSS은 (오라클 12C) 적용 사용할 수 있습니다 :

    --Sample data:
    CREATE TABLE tab(ColumnA NUMBER(10,2),ColumnB NUMBER(10,2),ColumnC NUMBER(10,2));
    
    INSERT INTO tab(ColumnA, ColumnB, ColumnC) VALUES (2, 10, 2);
    INSERT INTO tab(ColumnA, ColumnB, ColumnC) VALUES (3, 15, 6);
    INSERT INTO tab(ColumnA, ColumnB, ColumnC) VALUES (7, 14, 3);
    COMMIT;
    

    질문:

    SELECT
      ColumnA,
      ColumnB,
      sub.calccolumn1,
      sub.calccolumn1 / ColumnC AS calccolumn2
    FROM tab t
    CROSS APPLY (SELECT t.ColumnA + t.ColumnB AS calccolumn1 FROM dual) sub;
    

    DB 휘티 d 혀라도

    적용 CROSS / OUTER 너무 다른 절에서 사용할 수 있습니다 적용에서 그 표현을 유의하시기 바랍니다 :

    SELECT
      ColumnA,
      ColumnB,
      sub.calccolumn1,
      sub.calccolumn1 / ColumnC AS calccolumn2
    FROM tab t
    CROSS APPLY (SELECT t.ColumnA + t.ColumnB AS calccolumn1 FROM dual) sub
    WHERE sub.calccolumn1 = 12;
    -- GROUP BY ...
    -- ORDER BY ...;
    

    이 방법은 (복잡 하나는 유지하기 어려울 수 있습니다) 여러 장소에서 같은 표현을 / outerquery 또는 사본으로 전체 쿼리를 포장하지 않도록 붙여 넣기 할 수 있습니다.

    관련 기사 : SQL 언어의 대부분 누락 된 기능

  4. ==============================

    4.당신은 당신의 계산 열에 대한 표현을 포함해야한다 :

    당신은 당신의 계산 열에 대한 표현을 포함해야한다 :

    SELECT  
    ColumnA,  
    ColumnB,  
    ColumnA + ColumnB AS calccolumn1  
    (ColumnA + ColumnB) / ColumnC AS calccolumn2
    
  5. ==============================

    5.에서 SQL 서버 당신은 CTE로 사용하여이 작업을 수행 할 수 있습니다

    에서 SQL 서버 당신은 CTE로 사용하여이 작업을 수행 할 수 있습니다

    WITH common_table_expression (Transact-SQL)를 참조하십시오

    CREATE TABLE tab(ColumnA DECIMAL(10,2), ColumnB DECIMAL(10,2), ColumnC DECIMAL(10,2))
    
    INSERT INTO tab(ColumnA, ColumnB, ColumnC) VALUES (2, 10, 2),(3, 15, 6),(7, 14, 3)
    
    WITH tab_CTE (ColumnA, ColumnB, ColumnC,calccolumn1)  
    AS  
    (  
    Select
        ColumnA,
        ColumnB,
        ColumnC,
        ColumnA + ColumnB As calccolumn1
      from tab
    )  
    
    SELECT
      ColumnA,
      ColumnB,
      calccolumn1,
      calccolumn1 / ColumnC AS calccolumn2
    FROM  tab_CTE
    

    DB 휘티 d 혀라도

  6. from https://stackoverflow.com/questions/19185043/how-to-use-a-calculated-column-to-calculate-another-column-in-the-same-view by cc-by-sa and MIT license