`

SQL:自联接构建同比增长率视图

    博客分类:
  • sql
 
阅读更多

自联接构建同比,同比数据已出来,增长率就简单了

 

--################################################################
drop table #p;

create table #p
(
    id int,
    year varchar(4),
    month varchar(2),
    qty int
)
 
insert into #p values (1,'2012','1',10);
insert into #p values (2,'2012','2',15);
insert into #p values (3,'2012','3',20);
insert into #p values (4,'2013','5',30);
insert into #p values (5,'2013','6',35);
insert into #p values (6,'2013','7',40);
insert into #p values (7,'2013','8',45)
insert into #p values (8,'2013','9',50)
insert into #p values (9,'2013','12',100)
insert into #p values (10,'2014','1',10);
insert into #p values (11,'2014','3',15);
insert into #p values (12,'2014','4',20);
insert into #p values (13,'2014','5',30);
insert into #p values (14,'2014','7',40);
insert into #p values (15,'2014','8',45);
insert into #p values (16,'2014','9',50);
insert into #p values (17,'2015','5',30);
insert into #p values (18,'2016','7',40);
insert into #p values (19,'2017','8',45);
insert into #p values (120,'2017','9',50);

select * from #p

 如图:

 

select t1.v_year as 本年年份, t1.v_month as 本年月份,t1.v_sum as 本月数据,t2.v_sum 上月数据,t2.v_year as 上年年份, t2.v_month as 上月月份,t3.v_sum 本年数据,t4.v_sum 上年数据 from
(
    (
        select distinct cast(year as char(4)) as v_year,cast(month as char(2)) as v_month,sum(qty) over (partition by (cast(year as nvarchar)+'-'+cast(month as nvarchar))) v_sum from #p
    )t1 left join
    (
         select distinct cast(year as char(4)) as v_year,cast(month as char(2)) as v_month,sum(qty) over (partition by (cast(year as nvarchar)+'-'+cast(month as nvarchar))) v_sum  from #p
    )t2 on dateadd(month,0,cast(t1.v_year as nvarchar)+'-'+ cast(t1.v_month as nvarchar)+'-01')=dateadd(month,1,cast(t2.v_year as nvarchar)+'-'+ cast(t2.v_month as nvarchar)+'-01')
     left join(
		select distinct cast(year as char(4)) as v_year,sum(qty) over (partition by (cast(year as nvarchar))) v_sum from #p
    )t3 on t1.v_year=t3.v_year
    left join(
		select distinct cast(year as char(4)) as v_year,sum(qty) over (partition by (cast(year as nvarchar))) v_sum from #p
    )t4 on t1.v_year=t4.v_year+1
   
)

 如图:

 

 

select t1.v_year as 本年年份, t1.v_month as 本年月份,t1.v_sum as 本月数据,t2.v_sum 上月数据,t2.v_year as 上年年份, t2.v_month as 上月月份,t3.v_sum 本年累计,t4.v_sum 上年累计 from  
(  
    (  
        select distinct cast(year as char(4)) as v_year,cast(month as char(2)) as v_month,sum(qty) over (partition by (cast(year as nvarchar)+'-'+cast(month as nvarchar))) v_sum from #p  
    )t1 left join  
    (  
         select distinct cast(year as char(4)) as v_year,cast(month as char(2)) as v_month,sum(qty) over (partition by (cast(year as nvarchar)+'-'+cast(month as nvarchar))) v_sum  from #p  
    )t2 on dateadd(month,0,cast(t1.v_year as nvarchar)+'-'+ cast(t1.v_month as nvarchar)+'-01')=dateadd(month,1,cast(t2.v_year as nvarchar)+'-'+ cast(t2.v_month as nvarchar)+'-01')  
     left join(  
       select _t1.year as v_year,_t1.month as v_month,SUM(_t2.qty) as v_sum from #p _t1 join #p _t2 on _t1.year=_t2.year and cast(_t2.month as int)<=cast(_t1.month as int) group by _t1.year,_t1.month
    )t3 on t1.v_year=t3.v_year and t1.v_month=t3.v_month
    left join(  
       select _t1.year as v_year,_t1.month as v_month,SUM(_t2.qty) as v_sum from #p _t1 join #p _t2 on _t1.year=_t2.year and cast(_t2.month as int)<=cast(_t1.month as int) group by _t1.year,_t1.month
    )t4 on t1.v_year=t4.v_year+1 and t1.v_month=t4.v_month
     
)  

 

分享到:
评论

相关推荐

    T-SQL语法大全

    **T-SQL**(Transact-SQL)是Microsoft SQL Server使用的SQL方言,它扩展了标准SQL的功能,提供了更强大的数据管理和编程能力。T-SQL由以下几个主要部分组成: 1. **DML(数据操作语言Data Manipulation Language)**: ...

    SQLServer调优系列

    - **案例分析**:通过具体实例,如`SELECT COUNT(*) FROM Orders`,展示SQL Server如何构建查询计划,以及不同运算符的作用机制。 #### 六、结语 通过对SQL Server调优系列文章的学习,不仅可以深入了解SQL Server...

    SQL SERVER自测题

    2. **数据库文件设置**:可以调整数据库文件的增长率,例如修改主数据库文件的增长率为20%,以控制数据文件的自动扩展行为。 3. **数据库重命名**:数据库的名称可以根据需要进行更改,如将"学校管理"数据库改名为...

    sql-server数据库课程.docx

    - **性能监视器**:监视SQL Server的性能指标,如CPU使用率、内存使用情况等。 #### 十八、向导和工具 - **服务器注册向导**:方便地注册新服务器。 - **数据库类向导工具**:如数据库引擎向导等。 - **系统管理类...

    Oracle_SQL-Optimization.rar_oracle_sql优化

    Oracle数据库系统因其高效、稳定和功能强大而被广泛使用,但随着数据量的增长,SQL查询的优化变得至关重要。本资源"Oracle_SQL优化.PDF"虽然内容可能较老,但它提供了一些基础的SQL优化技巧,对于初学者来说是一份...

    Oracle+SQL优化

    在系统开发与维护过程中,随着数据库数据量的增长,SQL语句的性能优化成为提升系统响应速度的关键环节。优化SQL不仅能够显著提升数据处理效率,还能大幅节省硬件资源,减少运维成本。Oracle数据库作为业界领先的...

    cognos报表技巧

    - 定制计算:创建自定义度量,如百分比变化、复合增长率等。 - 使用汇总区:在报告中添加汇总区以展示总和、平均值等统计信息。 5. **图表和图形**: - 选择合适的图表类型:条形图、折线图、饼图等各有适用场景...

    oracle大数据量的系统的数据库结构如何设计

    3. **硬盘资源分配**:数据、日志和索引文件应分散在不同的硬盘或磁盘阵列上,以提高I/O吞吐率。例如,使用NTFS格式的硬盘,对于大数据文件,可采用多数据库文件策略,利用RAID技术来分散负载。 4. **tempdb管理**...

    Oracle数据库性能优化分析.pdf

    - **选择合适的联合次序**:在涉及多个表联接的SQL语句中,正确的联结顺序至关重要。应先联结包含能过滤掉大部分行的表,以减少参与后续联结的行数。 - **有效WHERE子句**:WHERE子句的选择性条件可以减少查询的...

    整理Oracle数据库中数据查询优化的一些关键点

    本文将重点讨论Oracle查询优化的四个关键方面:提高查询命中率、多表查询优化、大表查询优化以及SQL优化。 首先,提高查询命中率是优化数据库性能的基础。命中率是指数据直接从内存中获取而不是从磁盘中读取的比率...

    基于Oracle8i的数据库性能优化.pdf

    - 对于经常需要联接操作的表,考虑在表空间或磁盘上分散,以利用并行I/O。 **2. 系统参数调整** Oracle数据库的性能很大程度上取决于系统参数的设置。正确配置初始化参数可以显著提升系统性能。例如: - `SGA`...

    ORACLE常见错误代码的分析与解决(一)

    1. 查看指定表空间的可用空间,使用`DBA_FREE_SPACE`视图: ```sql SELECT file_id, block_id, blocks, bytes FROM sys.dba_free_space WHERE tablespace_name='&lt;users&gt;'; ``` 确定是否有足够大的连续空闲空间。...

Global site tag (gtag.js) - Google Analytics