2017-09-26 12 views
0
select * 
    , AreaLeftOver=(KmSquared) % (20761) 
    , WhalesUnit = (KmSquared)/(20761) 
    , WhalesComparison= case when((KmSquared)/(20761) * (KmSquared) % (20761) )>0 then (KmSquared)/(20761) * (KmSquared) % (20761) else 'Smaller' end 
from CountriesByArea 
order by Country 

WhalesComparisonの記述欄はどのようにすることができますか?説明的な列代わりに値

私はcase文を使ってみましたが、それは私に 'varcharからbigint'への変換エラーを返すint値を与えます。

注:計算機能から派生した国、KmSquaredの列のみが残ります。

+0

あなたは、いくつかの例のデータを、基本的なスキーマとあなたが望む出力を提供することができますか? – Shawn

+0

出力:Whales比較の'31 x Whales plus 3909 sq.km ' 値は必要ありません –

答えて

0
SELECT POSITION 
,COUNTRY 
,KmSquared 
,AreaLeftOver 
,WhalesUnit 
,CASE WHEN CALC <= 0 THEN 'SMALLER' 
WHEN CALC > 0 THEN AreaLeftOver+''+ 'x WALES PLUS'+ '' + WhalesUnit 
ELSE 'NONE' 
END AS [Wales Comparision] 
FROM 
(
select POSITION 
,COUNTRY 
,KmSquared 
,CAST(KmSquared % 20761 AS nvarchar(MAX)) AS AreaLeftOver 
,CAST(KmSquared/20761 AS nvarchar(MAX)) AS WhalesUnit 
,((KmSquared % 20761) * (KmSquared/20761)) AS CALC 
from CountriesByArea 
)A 
order by Country 
1

データ型を1つの列に混在させることはできません。あなたは、intまたは文字列を返す数式を持っています。これを行うことはできませんが、すべてを文字列として返すことができます。計算のすべての列の周りにかっこは必要ありません。

select * 
    , AreaLeftOver= KmSquared % 20761 
    , WhalesUnit = KmSquared/20761 
    , WhalesComparsion= case when KmSquared/20761 * KmSquared % 20761 > 0 then convert(varchar(10), KmSquared/20761 * KmSquared % 20761) else 'Smaller' end 
from CountriesByArea 
order by Country 

さらに、「Smaller」というテキストをアプリケーションに組み込んで単純にNULLを返すこともできます。

select * 
    , AreaLeftOver= KmSquared % 20761 
    , WhalesUnit = KmSquared/20761 
    , WhalesComparsion= case when KmSquared/20761 * KmSquared % 20761 > 0 then KmSquared/20761 * KmSquared % 20761) end 
from CountriesByArea 
order by Country 
関連する問題