Nice programing

계산 된 열을 사용하여 동일한보기에서 다른 열을 계산하는 방법

nicepro 2020. 11. 28. 12:28
반응형

계산 된 열을 사용하여 동일한보기에서 다른 열을 계산하는 방법


이 질문에 도움이되기를 바랍니다. Oracle SQL (이보기의 경우 SQL Developer)을 사용하고 있습니다 ...

다음 열이있는 테이블이있는 경우 :

  • ColumnA (숫자)
  • ColumnB (숫자)
  • ColumnC (숫자)

내 관점에서 나는

Select  
ColumnA,
ColumnB,
ColumnA + ColumnB As calccolumn1

이제이 시점에서 calccolumn1을 사용하고 싶지만 그냥 말할 수는 없습니다 ...

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

나는 어떤 유형의 하위 쿼리가 필요하다고 가정하고 있습니다. 그러나 이것은 내가 당신의 도움이 필요한 곳입니다. 같은 쿼리 내에서 다른 계산에서 calccolumn1을 사용할 수 있도록 쿼리를 어떻게 표현할까요? If then 또는 Case when 일 수 있지만 결론적으로는 파생 된 숫자입니다.


중첩 된 쿼리를 사용할 수 있습니다.

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

실제로 비용이 많이 드는 작업을 수행하지 않는 한 첫 번째 계산을 반복 할 수도 있습니다 (예 : 함수 호출을 통해).

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

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

SQL 서버에서

다음을 사용하여 수행 할 수 있습니다. cross apply

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

"동일한 쿼리 수준"에서 계산 된 열을 참조하려면 다음을 사용할 수 있습니다 CROSS APPLY(Oracle 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;

DBFiddle 데모


from 표현식은 CROSS APPLY/OUTER APPLY다른 절에서도 사용할 수 있습니다.

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 ...;

이 접근 방식을 사용하면 전체 쿼리를 외부 쿼리로 래핑하거나 동일한 표현식을 여러 위치에 복사 / 붙여 넣기하는 것을 방지 할 수 있습니다 (복잡한 경우 유지 관리가 어려울 수 있음).

관련 기사 : SQL 언어의 가장 누락 된 기능


계산 된 열에 대한 표현식을 포함해야합니다.

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

참고 URL : https://stackoverflow.com/questions/19185043/how-to-use-a-calculated-column-to-calculate-another-column-in-the-same-view

반응형