2017-08-15 44 views
1

我在Microsoft SQL Server中設置了一個視圖。我展示的部分視圖創建了一個名爲Starch的列。我如何操縱case表達式中創建的列來判斷它是高於還是低於2?已創建列的表達式

. 
.. 
... 
MAX(CASE WHEN R.ANALYTE = 'Starch' then 
(CASE WHEN ISNUMERIC(R.RN5) = 1 THEN CONVERT(float,R.RN5) ELSE convert(float,0) END) end) as [Starch], 

CASE 
WHEN Starch > 2 THEN 'ABOVE' 
ELSE 'Below' END 
As 'Starch_Cautionary', 
... 
.. 
. 
+0

小心使用'ISNUMERIC()'進行轉換驗證。什麼版本的SQL Server?此外,樣本數據和預期產出將有助於此。 – scsimon

+0

你想在同一個查詢中使用創建的列Starch?或者是什麼? –

+1

這與問題無關,但除了@scsimon評論SQL Server 2012及更高版本,您可以檢查[TRY_CONVERT](https://docs.microsoft.com/en-us/sql/t-sql/functions/try-convert -transact-sql)函數來取代整個IF THEN ELSE部分 –

回答

1

假設你ISNUMERIC仍然不會導致轉換錯誤(這可能取決於數據,即使= 1),那麼你可以在其他的東西在CTE這個包起來。 ISNUMERIC()的

with cte as(
. 
.. 
... 
MAX(CASE WHEN R.ANALYTE = 'Starch' then 
(CASE WHEN ISNUMERIC(R.RN5) = 1 THEN CONVERT(float,R.RN5) ELSE convert(float,0) END) end) as [Starch], 
... 
.. 
.) 

select 
    *, 
    CASE 
    WHEN Starch > 2 THEN 'ABOVE' 
    ELSE 'Below' END 
    As 'Starch_Cautionary', 
... 
.. 
. 
from cte 

例失敗...排序... ... ATLEAST對你的情況

declare @table table (i varchar(16)) 
insert into @table 
values 
('$'), 
('1e4'), 
('1,256,233'), 
('5D105') 

select isnumeric(i) from @table 

這些都返回true,但會失敗的轉換...