返回NULL的两个值的百分比

时间:2018-08-29 08:22:35

标签: sql sql-server-2016 percentage

与昨天的问题相同,已成功回答,但问题不同。我有两个值1和0,需要为它们计算百分比变化。根据该网站http://www.percent-change.com/index.php?y1=1&y2=0,介于1和0之间的百分比变化为-100%。根据建议的公式((((y2- y1))/ y1),我的代码如下所示。

DefinedYearVSPriorYearIndividual = ((( CTEDefinedYear.IndividualCases - CTEPreviousYear.IndividualCasesLastYear ))
                                              / ( CTEPreviousYear.IndividualCasesLastYear ) ) * 100

返回NULL。

两个数字是

CTEDefinedYear.IndividualCases = 1
CTEPreviousYear.IndividualCasesLastYear = 0

期望的结果应该是-100%。

有人可以看到我在做什么吗?

4 个答案:

答案 0 :(得分:0)

这是答案。

it('max value testing', () => {
        const FilterPriceObject = new Constructor().$mount()
        FilterPriceObject.setMaxPricePerson()
        expect(FilterPriceObject.maxPricePerPerson).to.equal(2001) 
    })

输出为-100。您错过了* 100部分。

答案 1 :(得分:0)

在您的情况下,您切换了变量。附带的公式是正确的。

select ((0 - 1) / 1)*100;

但是您使用了select ((1 - 0) / 0)*100;

所以,您会得到一个错误:

Msg 8134, Level 16, State 1, Line 1
Divide by zero error encountered.

答案 2 :(得分:0)

您必须使用CASE逻辑在除法侧处理0,以避免除以零错误。

DECLARE @CTEDefinedYear_IndividualCases INT = 1
DECLARE @CTEPreviousYear_IndividualCasesLastYear INT = 0

SELECT ((@CTEDefinedYear_IndividualCases - @CTEPreviousYear_IndividualCasesLastYear) / (CASE WHEN @CTEPreviousYear_IndividualCasesLastYear = 0 THEN 1 ELSE @CTEPreviousYear_IndividualCasesLastYear END)) * 100

答案 3 :(得分:0)

使其与该代码一起使用。

DefinedYearVSPriorYearIndividual =  ISNULL(100.0 * 
                                        (ISNULL(CTEDefinedYear.IndividualCases,0) 
                                        - ISNULL(CTEPreviousYear.IndividualCasesLastYear,0)) 
                                        / NULLIF(CTEPreviousYear.IndividualCasesLastYear,0),0)