2012-01-02 1 views
1

한 달에 계산 된 근무일 수를 계산하고 8을 곱한 후 BaseHours으로 저장했습니다. BaseHours을 포함하여 많은 열을 반환하는 SP입니다. 이제 다른 컬럼에서 같은 SP 내에이 BaseHours을 사용하고 싶지만 오류가 발생합니다. SQL Server를 사용하고 있습니다.다른 곳의 동일한 SP에서 저장 프로 시저의 계산 열 사용

잘못된 열 Name'basehours '

(case when f.employmenttype = 3 then 
    (case when c.paqtyq > BaseHours then 
      (c.paqtyq + (c.paqtyq - BaseHours)) * 0.5 
     else 
      c.paqtyq 
    end) 
    else 
     BaseHours 
    end) as bhours 
+2

는 당신이 요구하는지 이해가 안 돼요. 코드를 게시하거나 질문을 명확히하십시오. – RickNZ

+0

몇 가지 코드를 게시하여 gritch의 위치를 ​​확인하십시오. –

+1

어떤 DBMS를 사용하고 있습니까? 오라클, SQL 서버, MySQL ...? –

답변

1

나는 당신이 실제로 기존 테이블에 계산 된 열을 만들지 않았 겠지 아니라의 일환으로 계산 된 열을 반환하는 결과 집합?

그렇다면 결과 집합을 저장하고 완료 할 때까지 반환하지 않아야합니다.

-- Create and store the result set 
SELECT 
    ... 
INTO 
    #temp 
FROM 
    ... 

-- Do your checks 
??? 

-- Return the result set 
SELECT 
    * 
FROM 
    #temp 


편집 난 아직도 조금 같은데요,하지만 난 당신의 문제를 이해하는 것 같아요 ...

당신은 다른 곳에서 앨리어스 열을 다시 사용할 수 없습니다 select 문은, 그래서 이것은

SELECT 
    value * 1.15 AS price, 
    price * 0.95 AS discounted_price 
FROM 
    stock_table 

대신 당신이 ...

두 단계에서 그것을 할 필요가 작동하지 않습니다 ...
SELECT 
    price, 
    price * 0.95 AS discounted_price 
FROM 
(
    SELECT 
    value * 1.15 AS price 
    FROM 
    stock_table 
) 
    AS prices 

아니면 내가이 정돈하다고 생각 CTE를 사용하여 ...

WITH 
    prices AS 
(
    SELECT 
    value * 1.15 AS price 
    FROM 
    stock_table 
) 
SELECT 
    price, 
    price * 0.95 AS discounted_price 
FROM 
    prices 
+0

나는 한 달에 작업 일 수를 계산하고 8을 곱한 다음 저장합니다 그것은 basehours.it로 다른 열에 대한 BaseHours.now를 포함하여 많은 열을 반환하는 SP입니다.이 BaseHours ...를 사용하고 싶습니다. 그러나 ... can not ... (f.employmenttype = 3 인 경우) \t 때 c.paqtyq> BaseHours 다음 이 \t \t (c.paqtyq + (c.paqtyq이-BaseHours)) * 다른 0.5 \t \t \t c.paqtyq 끝) bhours로 다른 \t BaseHours 끝) –

+0

@SunilChy - 참조 내 편집, 도움이되기를 바랍니다. 오늘은 :) – MatBailie

+0

감사합니다 Dems 내가이 시나리오를 찾고 있었는데 .......... 내 스크립트에서 그것을 구현하자 ... –