2017-09-26 121 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的描述性列?改爲描述性列值

我試過使用大小寫的語句,但它給了我int值,它引發了從'varchar到bigint'的轉換錯誤。

注:我只有國家,KmSquared列休息我從計算函數派生。

+0

你可以提供一些數據,例如,一個基本的架構和你想要的輸出? – Shawn

+0

輸出:'31 x鯨魚加上3909平方公里鯨爲比較 我不需要值 –

回答

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

不能在單個列中混合使用數據類型。你有一個返回一個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