2012-09-19 47 views
4

我想前言,我沒有寫這個。我今天早些時候繼承了它,我一直在努力尋找解決方案。下面的代碼庫工作 - 除了成本每平方英尺以Alpha順序而不是數字返回。更改ORDER BY導致「錯誤轉換數據類型」

SELECT 
    CTE.Suite, CTE.Building, CS.Address, CS.City, CS.State, CTE.Tenant, 
    CTE.AverageCharges, CTE.SQFT, CTE.CostSQFT, CTE.TenantType 
FROM cteInvoices as CTE 
    ... 
ORDER BY 
    CASE @Order 
     WHEN 'Suite' THEN CTE.Suite 
     WHEN 'Cost' THEN cast(CTE.costSQFT as varchar) 
    END 

我改變了年底情況如下:

ORDER BY 
    CASE @Order 
     WHEN 'Suite' THEN CTE.Suite 
     WHEN 'Cost' THEN CTE.costSQFT 
    END 

那固定的費用排序,但是,當我選擇的套件進行排序,我得到:

Msg 8114, Level 16, State 5, Procedure rCostSQFTcsort, Line 17 
    Error converting data type varchar to numeric. 

我這個晚上大部分時間都在進行這項工作,而我似乎沒有做任何事情來修復它 - 如果有的話,它往往會讓事情變得更糟。我希望第二組眼睛可以在這個問題上提出一些看法。

+0

回覆:'鑄成varchar'請閱讀:http://sqlblog.com/blogs/aaron_bertrand/ archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –

回答

7

如果這些不能轉換爲相同類型,您可能需要將它們分爲兩個單獨的子句。原因是CASE是一個返回單個數據類型值的表達式,所有潛在選項提供的數據類型都必須是可轉換的。如果沒有ELSE然後NULL返回,所以它會訂單的行爲「分支」一樣:

ORDER BY 
    CASE @Order 
     WHEN 'Suite' THEN CTE.Suite END, 
    CASE @Order 
     WHEN 'Cost' THEN CTE.costSQFT END; 

它可能會,你可以顯式地轉換其中的一個,但是這可能會改變它的意義(例如,你可能還是要11.09.0排序,都轉換成字符串不會做

+0

這樣做!謝謝你在很多層面! – STLCajun

相關問題