两个值之间的百分比增加

时间:2013-10-24 13:03:54

标签: sql-server sql-server-2008-r2

我创建了这个SQL查询:

select "Období", sum(Cena),"Skupina zboží", "Zkratka skupiny", "Firma"
from
(select CASE when fav.VATDate<DATEADD(month, -3, GETDATE()) and  fav.VATDate>=DATEADD(month, -6, GETDATE()) then '3 až 6 měsíc zpětně'
                  when fav.VATDate>=DATEADD(month, -3,GETDATE()) then '3 měsíce zpětně'
        END "Období"
       ,pro.Ce_Jedn * pro.Mnoz "Cena"
       ,zbo.SkZ "Skupina zboží"
       ,CASE WHEN  charindex('-', zbo.skz) > 0 then substring(zbo.SkZ, 0, charindex('-', zbo.skz)) 
                  else zbo.SKZ
        END "Zkratka skupiny"  
       ,baz.fir "Firma"
from PRODEJ pro
inner join FAKTVYDA fav on fav.Ci=pro.C_Fak and fav.Rada=pro.R_Fak
inner join ZBOZI zbo on zbo.Cis=pro.C_Zbo 
left join ZAKAZKA zak on zak.Ci=pro.Ci and zak.Rada=pro.Rada
left join ZAKAZNIK baz on baz.cdo=fav.cdo
where pro.datp > -2 and fav.VATDate>=DATEADD(month, -6, GETDATE())) tab
group by
"Období","Skupina zboží", "Zkratka skupiny", "Firma"

此查询的结果如下: Result http://img844.imageshack.us/img844/9903/s1q6.png

现在我需要再添加一列,其中“3až6měsícůzpětně”和“3měsícezpětně”之间的百分比增加。这有什么方法可以实现这个目标吗?

编辑 这可能有助于更好的想象 Second image

1 个答案:

答案 0 :(得分:1)

好的,即使你仍然没有真正向我们展示你想要的结果(你的照片上增加百分比的列在哪里?),我相信这就是你需要的:

SELECT  [Zkratka skupiny],
        [Skupina zboží],
        [Firma],
        [3 až 6 měsíc zpětně],
        [3 měsíce zpětně],
        ([3 až 6 měsíc zpětně]/NULLIF([3 měsíce zpětně],0) - 1)
        *100 [Percent Increase]
FROM (  SELECT  SUM(CASE 
                        WHEN fav.VATDate < DATEADD(MONTH,-3,GETDATE()) 
                            AND fav.VATDate >= DATEADD(MONTH, -6, GETDATE()) 
                        THEN pro.Ce_Jedn * pro.Mnoz
                    END) [3 až 6 měsíc zpětně],
                SUM(CASE 
                        WHEN fav.VATDate >= DATEADD(MONTH, -3,GETDATE()) 
                        THEN pro.Ce_Jedn * pro.Mnoz
                    END) [3 měsíce zpětně],
               zbo.SkZ [Skupina zboží],
               CASE 
                    WHEN CHARINDEX('-', zbo.skz) > 0 
                    THEN SUBSTRING(zbo.SkZ, 0, CHARINDEX('-', zbo.skz)) 
                    ELSE zbo.SKZ
                END [Zkratka skupiny],
               baz.fir [Firma]
        FROM PRODEJ pro
        INNER JOIN FAKTVYDA fav 
            ON fav.Ci=pro.C_Fak AND fav.Rada=pro.R_Fak
        INNER JOIN ZBOZI zbo 
            ON zbo.Cis=pro.C_Zbo 
        LEFT JOIN ZAKAZKA zak 
            ON zak.Ci=pro.Ci AND zak.Rada=pro.Rada
        LEFT JOIN ZAKAZNIK baz 
            ON baz.cdo=fav.cdo
        WHERE pro.datp > -2 
        AND fav.VATDate >= DATEADD(MONTH,-6, GETDATE())
        GROUP BY zbo.SkZ,
                 CASE 
                    WHEN CHARINDEX('-', zbo.skz) > 0 
                    THEN SUBSTRING(zbo.SkZ, 0, CHARINDEX('-', zbo.skz)) 
                    ELSE zbo.SKZ
                 END,
                 baz.fir) tab