programing

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

goodjava 2023. 3. 26. 11:20

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

저는 당신이 이 질문에 도움이 되기를 바랍니다.Oracle SQL(이 뷰용 SQL 개발자)을 사용하고 있습니다...

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

  • 열 A(번호)
  • 열 B(숫자)
  • ColumnC(번호)

제가 보기에는

Select  
ColumnA,
ColumnB,
ColumnA + ColumnB As calccolumn1

이 시점에서 calcolumn1을 사용하고 싶은데...

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 Server에서

다음을 사용하여 이 작업을 수행할 수 있습니다.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(오라클 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 데모


그 표현에 주의해 주세요.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

SQL

Server에서는 CTE를 사용하여 이 작업을 수행할 수 있습니다.

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

DBFiddle 데모

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