나는Oracle SQL 문에서 동적 열을 다시 사용하는 방법은 무엇입니까?
SELECT
A*2 AS P,
P+5 AS Q
FROM tablename
'TABLENAME'는 'A'라는 열이
하지만, 다른 colums 같은 몇 가지 내가 오라클 SQL에서 동적으로 계산 열, 뭔가를 다시 사용하려고합니다. 이 날 내가
SELECT P, P+5 AS Q
FROM (SELECT A*2 AS P FROM tablename)
같은 하위 쿼리를 사용하여이 문제를 해결하는 방법을 알고
ORA-00904: "P": invalid identifier
에게 제공하지만이 좀 추한 생각합니다. 또한 쿼리를 다소 복잡하게 만들고 싶습니다. 'Q'를 재사용하고, 또 다른 하위 쿼리를 만들고 싶지 않습니다.
업데이트 : 'P'계산을 저장하려는 이유는 더 복잡하게 만들고 'P'를 여러 번 사용하려는 것입니다. 그래서 나는 'A * 2 + 5 AS Q'라고 명시 적으로 말하고 싶지 않습니다. 왜냐하면 'P'가 더 복잡해지면 금방 성가 시게 될 것이기 때문입니다.
좋은 방법이 있어야합니다. 아이디어가 필요하십니까?
업데이트 : 나는 :(DB를-관리자 아니에요 있음을 유의
업데이트 :.. 실제 세계 예를 들어,보다 구체적인 쿼리 내가하고 싶은 무엇 것은 :
SELECT
SL/SQRT(AB) AS ALPHA,
5*LOG(10,ALPHA) AS B,
2.5*LOG(10,1-EXP(-5/ALPHA)*(5/ALPHA+1)) AS D
BS -2.74 + B + D AS BSA
FROM tablename
지금, 나는 어떤 작품을 기입하지만, 못생긴했습니다
SELECT
SL/SQRT(AB) AS ALPHA,
5*LOG(10,SL/SQRT(AB)) AS B,
2.5*LOG(10,1-EXP(-5/(SL/SQRT(AB)))*(5/(SL/SQRT(AB))+1)) AS D
BS -2.74 + 5*LOG(10,SL/SQRT(AB)) + 2.5*LOG(10,1-EXP(-5/(SL/SQRT(AB)))*((5/(SL/SQRT(AB)))+1)) AS BSA
FROM tablename
내가 데이터를 수신 한 후이 모든 것을 할 수있는,하지만 난의 방법 보자, 생각 나는 데이터베이스를 그렇게 할 수있다. 또한 'BSA'도 선택하고 싶습니다.이 쿼리는 하위 쿼리/with 절로 사용할 수 있습니다.
업데이트 : 이제는 Cade Roux와 Dave Costa의 솔루션으로 끝났습니다. Pax '와 Jens Schauder의 솔루션은 더 좋아 보이지만 DBA가 아니기 때문에 사용할 수 없습니다. 지금 누가 가장 좋은 답으로 표시 할 지 모릅니다 :). 사람이 관심 경우 BTW
WITH
A1 AS (
SELECT A0.*,
SL/SQRT(AB) AS ALPHA
FROM tablename A0
),
A2 AS (
SELECT A1.*,
5*LOG(10,ALPHA) AS B,
2.5*LOG(10,1-EXP(-5/ALPHA)*((5/ALPHA)+1)) AS D
FROM A1
)
SELECT
ALPHA, B, D, BS,
BS -2.74 + B + D AS BSA
FROM A2
는 SB 보정 조건있는 B 및 D에 대해 은하 '표면 밝기'이다.
하하, 그것은 부작용을 일으켰습니다! 나는 처음에 'T'와 'S'를 사용했기 때문에 존재했던 새로운 칼럼에 사용되었습니다. 그래서 오류가 없었고, 단지 완전히 잘못된 값이었습니다. (200+ 열, 모두 2-5 자 ...) – BlackShift
결과는 열 순서 변경에 따라 변하지 않습니다. 바라건대, ANSI는 일종의 인라인 스태킹 지시문 형태로 약간의 안도감을 제공 할 것입니다. –