SQL Server:2行之间的差异

时间:2015-12-22 15:16:18

标签: sql sql-server-2005

我有一个查询,我使用PIVOT以这种方式返回一个表

category                date             value
-----------------------------------------------    
cat1                  2015-08-01         10     
cat1(Previous)        2015-07-01         20
cat2                  2015-09-01         15
cat2(Previous)        2015-08-01         25
cat3                  2015-10-01         NULL
cat3(Previous)        2015-09-01         58

我的代码如下:

select *  from (
    select t1.name as name, t1.date as date, t1.value as value from (
        select ct.theName as [name], 
        CONVERT(nvarchar(50),   DATENAME(m, buca.date) 
                               +', ' 
                               + DATENAME(yyyy,buca.date))as date   
        , sum(buca.value) as value from blackU bu
            join blackUCat buc on bu.id = buc.blackucat_id
            join cat_size ct on ct.id = buc.size_id
            join blackU_actual2 buca on buc.id = buca.blackU_Id
        where buca.date between  cast     (@start as VARCHAR(50)) and   cast     (@actual as VARCHAR(50))
         and bu.name =   cast     (@blackU as VARCHAR(50))
            group by buca.date, ct.category_name
            )t1

            union all

            select t2.name as name, t2.date as date, t2.value as value from (
        select ct.theName as [name], 
        CONVERT(nvarchar(50),   DATENAME(m, buca.date) 
                               +', ' 
                               + DATENAME(yyyy,buca.date))as date   
        , sum(buca.value) as value from blackU bu
            join blackUCat buc on bu.id = buc.blackucat_id
            join cat_size ct on ct.id = buc.size_id
            join blackU_actual1 buca on buc.id = buca.blackU_Id
        where buca.date between  cast     (@next as VARCHAR(50)) and   cast     (@end as VARCHAR(50))
         and bu.name =   cast     (@blackU as VARCHAR(50))
            group by buca.date, ct.category_name
            )t2


            union all

            select t3.name as name, t3.date as date, t3.value as value from (
        select ct.theName as [name], 
        CONVERT(nvarchar(50),   DATENAME(m, buca.date) 
                               +', ' 
                               + DATENAME(yyyy,buca.date))as date   
        , sum(buca.value) as value from blackU bu
            join blackUCat buc on bu.id = buc.blackucat_id
            join cat_size ct on ct.id = buc.size_id
            join blackU_actual buca on buc.id = buca.blackU_Id
        where buca.date between  cast     (@start as VARCHAR(50)) and   cast     (@end as VARCHAR(50))
         and bu.name =   cast     (@blackU as VARCHAR(50))
            group by buca.date, ct.category_name
            )t3

            ) as table

我想要的是拥有一个名为cat1(difference)的行,并且是第一行和第二行,第三行和第四行之间的差异 像这样的东西:

类别日期值

cat1                  2015-08-01         10     
cat1(Previous)        2015-07-01         20
cat1(difference)      2015-09-01        -10    
cat2                  2015-09-01         15
cat2(Previous)        2015-08-01         25
cat2(difference)      2015-08-01        -10 
cat3                  2015-10-01         NULL
cat3(Previous)        2015-09-01         58
cat3(difference)      2015-09-01        -58

0 个答案:

没有答案