2017-08-15 1 views
1

Microsoft SQL Serverでビューを設定しました。私が表示しているビューの部分は、Starchという名前の列を作成します。ケース式内で作成した列を操作して、それが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

作成したカラムデンプンを同じクエリで使用したいですか?または何? –

+1

質問とは無関係ですが、@scsimonのコメントSQL Server 2012以降では、[TRY_CONVERT](https://docs.microsoft.com/en-us/sql/t-sql/functions/try-convert)をチェックすることができます。 -transact-sql)関数を使用してその全体を置き換えます。次にTHERMAL以外の部分 –

答えて

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を返しますが、変換が失敗していました...

関連する問題