반응형
계산 된 열을 사용하여 동일한보기에서 다른 열을 계산하는 방법
이 질문에 도움이되기를 바랍니다. 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;
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
반응형
'Nice programing' 카테고리의 다른 글
Spring 3 MVC 애플리케이션을위한 maven 2 archetype이 있습니까? (0) | 2020.11.28 |
---|---|
여러 필드에 LINQ Distinct ()를 사용하는 방법 (0) | 2020.11.28 |
Xcode가 일치하는 서명 자산을 찾거나 생성하려고했으나 실패했습니다. (0) | 2020.11.28 |
항목을 삽입하거나 정렬 된 목록에 추가 한 후 목록을 정렬하는 것이 더 빠릅니까? (0) | 2020.11.28 |
스윙 : JFrame 이미지 얻기 (0) | 2020.11.28 |