当前位置: 代码迷 >> Sql Server >> 一条sql中查询现年和去年同期
  详细解决方案

一条sql中查询现年和去年同期

热度:16   发布时间:2016-04-24 18:32:49.0
一条sql中查询今年和去年同期
下面条sql查询出的是今年某一周的销售数据,怎么在同一条sql中查询出去年同期的数据呢?
select store,sum(endprice*nb) as sum_sales_lweek,SUM(nb) as sum_nb,count(distinct nos) as sum_nos
from [CMD].[dbo].[cmd_xjjx_sale]
where outdate<='20140223' and outdate>='20140216' and endprice>0
group by store

------解决方案--------------------
不知道是不是你说的意思
select a.store,sum_sales_lweek,sum_nb,sum_nos,[2013sum_sales_lweek],[2013sum_nb],[2013sum_nos] from 
(select store,sum(endprice*nb) as sum_sales_lweek,SUM(nb) as sum_nb,count(distinct nos) as sum_nos 
from [CMD].[dbo].[cmd_xjjx_sale] where outdate<='20140223' and outdate>='20140216' and endprice>0 
group by store) a,
(select store,sum(endprice*nb) as [2013sum_sales_lweek],SUM(nb) as [2013sum_nb],count(distinct nos) as [2013sum_nos]
from [CMD].[dbo].[cmd_xjjx_sale] where outdate<='20130223' and outdate>='20130216' and endprice>0 
group by store) b where a.store=b.store
------解决方案--------------------

declare @begindate varchar(20),@enddate varchar(20)
select @begindate='20140216',@enddate='20140223'

select a.store,
       a.sum_sales_lweek,a.sum_nb,a.sum_nos,
       isnull(b.sum_sales_lweek,0) 'lastyear_sum_sales_lweek',
       isnull(a.sum_nb,0) 'lastyear_sum_nb',
       isnull(a.sum_nos,0) 'lastyear_sum_nos',
from
(select store,
        sum(endprice*nb) as sum_sales_lweek,
        sum(nb) as sum_nb,
        count(distinct nos) as sum_nos
 from [CMD].[dbo].[cmd_xjjx_sale]
 where outdate>=@begindate and outdate<=@enddate and endprice>0
 group by store) a
left join
(select store,
        sum(endprice*nb) as sum_sales_lweek,
        sum(nb) as sum_nb,
        count(distinct nos) as sum_nos
 from [CMD].[dbo].[cmd_xjjx_sale]
 where outdate>=convert(varchar,dateadd(yyyy,-1,@begindate),112) 
 and outdate<=convert(varchar,dateadd(yyyy,-1,@enddate),112) and endprice>0
 group by store) b on a.store=b.store

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:


你的意思是只对b那个子查询来分页,而不是对于整个查询来分页啊

是对整个查询来分页


试试这个:
declare @page_size int;
declare @page_num int;
 
--比如:每页10条记录
set @page_size = 10;
 
--比如:先取第1页
set @page_num = 1;

select *
from 
(
    select  a.dbno, a.names,a.qsq,a.class2,a.area_no,b.sum_sales_lweek,b.sum_nb,b.sum_nos,b.last_sum_nb,b.last_sum_nos,b.last_sum_sales_lweek,
        (row_number() over(order by b.last_sum_sales_lweek desc) - 1) / @page_size as rownum
from
(
select a.store,sum_sales_lweek,sum_nb,sum_nos,[last_sum_sales_lweek],[last_sum_nb],[last_sum_nos] 
from 
(
select store,sum(endprice*nb) as sum_sales_lweek,SUM(nb) as sum_nb,count(distinct nos) as sum_nos 
from [CMD].[dbo].[cmd_xjjx_sale] where outdate<='20140223' and outdate>='20140216' and endprice>0 
group by store
) a,
(
select store,sum(endprice*nb) as [last_sum_sales_lweek],SUM(nb) as [last_sum_nb],count(distinct nos) as [last_sum_nos]
from [CMD].[dbo].[cmd_xjjx_sale] where outdate<='20130223' and outdate>='20130216' and endprice>0 
group by store
) b 
where a.store=b.store

) b,
[BI数据仓库].[dbo].[BI_shop_area] a
where a.dbno=b.store
)t
where rownum = @page_num - 1
order by sum_sales_lweek desc