2011-03-03 4 views
14

내가 특정 테이블에 엄청난 선택을했다고 할 수 있습니다. 한 열에 대한 하나의 값은 복잡한 logc로 계산되며 ColumnA이라고합니다. 이제 다른 열에 대해서는 ColumnA의 값이 필요하고 다른 정적 값이 추가됩니다.다른 열 (SQL Server)의 열 값 사용?

샘플 SQL :

select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ... 

[COLUMNA] + 10 메신저를 찾는 것입니다. 복잡한 물건은 거대한 사건/때 블록입니다.

아이디어가 있으십니까?

답변

16

, 당신은 하위 SELECT가에 기존 쿼리를 이동해야합니다 : 여기

은 예입니다

SELECT 
    /* Other columns */, 
    ColumnA, 
    ColumnA + 10 as ColumnB 
FROM 
(select table.id, table.number, complex stuff [ColumnA].. from table ... 
) t 

당신 (위의 경우, 닫는 괄호 뒤에 t,이 테이블에 대한 별칭을 도입해야합니다. 사용하지 않을 경우에도 마찬가지입니다.)

(동등하게 - 나중에 SQL Server 2005 또는를 사용하는 가정 - 당신은 CTE로 기존 쿼리를 이동할 수 있습니다) :이 부분의 여러 수준을 가지고있는 경우에

;WITH PartialResults as (
    select table.id, table.number, complex stuff [ColumnA].. from table ... 
) 
SELECT /* other columns */, ColumnA, ColumnA+10 as ColumnB from PartialResults 

CTE를 청소기 보는 경향이있다 계산이 완료되었습니다. 즉 이제 ColumnB에 의존하는 계산을 쿼리에 포함 시키면됩니다. 당신은 할 수

1

하위 쿼리와 열 별칭으로 해결할 수 있습니다. 당신이 SELECT 절에서 계산 된 것 값을 참조 할 경우

SELECT MaxId + 10 
FROM (SELECT Max(t.Id) As MaxId 
     FROM SomeTable t) As SomeTableMaxId 
1

:

  1. 는 클라이언트 코드
  2. complex stuff의 로직을 캡슐화하는 스칼라 반환 함수를 작성에 + 10를 수행합니다. 단일 호출로 최적화됩니다.
  3. 다른 열에는 complex stuff 논리를 복사하십시오. 그것은 1 통화로 최적화되어야합니다.
  4. 하위 선택을 사용하여 추가 계산 적용
+0

+1 그 두 번째 아이디어가 마음에 들었습니다. –