2012-01-02 54 views
1

我剛剛計算了一個月中的工作日數,並將其乘以8並將其存儲爲BaseHours。這是一個返回許多列的SP,包括BaseHours。現在對於其他列,我想在同一個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 2012-01-02 09:53:26

+0

發表一些代碼,看看gritch在哪裏。 – 2012-01-02 09:54:48

+1

你在用什麼DBMS? Oracle,SQL Server,MySQL ...? – 2012-01-02 10:31:22

回答

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是一個SP返回許多列包括BaseHours.now爲其他列我想使用此BaseHours ...但我不能...(case f.employmenttype = 3 then \t(case當c.paqtyq> BaseHours然後 \t \t(c.paqtyq +(c.paqtyq-BaseHours))* 0.5 \t別的 \t \t c.paqtyq端) 別的 \t BaseHours端)作爲bhours – 2012-01-02 10:24:54

+0

@SunilChy - 參見我編輯,希望它有幫助,我出去了一天現在:) – MatBailie 2012-01-02 10:47:43

+0

謝謝德姆我只是在尋找這種情況..........讓我在我的腳本中實現它... – 2012-01-02 10:57:48

相關問題