首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
分页编号的另一种方式,增删改存储过程
发布时间:2019-12-29 02:18
浏览次数:

 

通俗简单的说:PIVOT就是行转列,UNPIVOT就是列传行

今天看书讲T-SQL,看到了UNBOUNDED PRECEDING,就想比对下ROW_NUMBER()的运行速度。

    declare @yyyymmddhhmm char(12);--时间    

    set @yyyymmddhhmm=datename(year,GETDATE())+right('0'+DATENAME(MONTH,GETDATE()),2)+right('0'+DATENAME(DAY,GETDATE()),2)+right('0'+DATENAME(HOUR,GETDATE()),2)+right('0'+DATENAME(MINUTE,GETDATE()),2)

    set @O_ErrorCode=0;
    set @O_ReturnMessage='操作成功';

    if @I_OperateType>3 
    begin    
    set @O_ErrorCode=999;
    set @O_ReturnMessage='不支持该操作';
    return;    
    end

    begin try
        begin tran
            --增加
            if @I_OperateType=1
            begin

            select 'add'

            end
            --删除
            else if @I_OperateType=2
            begin

            select 'delete'

            end
            --更新
            else
            begin

            select 'update'

            end



        commit tran
    end try    
    begin catch
        rollback tran

    end catch

Preface

在数据库操作中,有些时候我们遇到需要实现“行转列”的需求,例如一下的表为某店铺的一周收入情况表:

sql及相关的结果如下,数据库中的数据有5W+。

 

 

WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIMAL)

ROW_NUMBER():

    Today I'm gonna implement a consul in my environment to discover service of MySQL database and check whether the master-slave is working normally.

我们先插入一些模拟数据:

SET STATISTICS TIME ON

SELECT
    ROW_NUMBER() OVER(ORDER BY Id DESC) rn,Id
FROM
    dbo.T_MyCourse

 

INSERT INTO WEEK_INCOME 
SELECT '星期一',1000UNION ALLSELECT '星期二',2000UNION ALLSELECT '星期三',3000UNION ALLSELECT '星期四',4000UNION ALLSELECT '星期五',5000UNION ALLSELECT '星期六',6000UNION ALLSELECT '星期日',7000

运行结果

Introduce

一般我们最经常使用的查询是查询一周中每天或某几天的收入,例如查询周一至周日全部的收入:

图片 1

 

SELECT WEEK,INCOME FROM WEEK_INCOME

UNBOUNDED PRECEDING

    Consul is a tool like zookeeper which can discover services we've registered on it.It's just a simple binary command which can run with simple configuration file(json format).

得到如下的查询结果集:

SET STATISTICS TIME ON

SELECT
    SUM(1) OVER(ORDER BY Id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) rn,Id
FROM
    dbo.T_MyCourse

 

WEEK           INCOME
星期一           1000
星期二           2000
星期三           3000
星期四           4000
星期五           5000
星期六           6000
星期日           7000

运行结果

official website:

但是在一些情况下(往往是某些报表中),我们希望在一行中显示周一至周日的收入,这时候查询结果集应该是这样的:

图片 2

https://www.consul.io/

星期一   星期二   星期三   星期四   星期五   星期六   星期日
1000     2000     3000     4000     5000     6000     7000

通过运行之后,看到结果,使用微软官方提供的方法进行编号排序,速度明显的提高。

 

这种情况下,SQL查询语句可以这样写:

不过我使用上述方法进行分页获取数据的时候结果又有点不一样。

Framework

SELECTSUM(CASE WEEK WHEN '星期一' THEN INCOME END) AS [星期一],
SUM(CASE WEEK WHEN '星期二' THEN INCOME END) AS [星期二],
SUM(CASE WEEK WHEN '星期三' THEN INCOME END) AS [星期三],
SUM(CASE WEEK WHEN '星期四' THEN INCOME END) AS [星期四],
SUM(CASE WEEK WHEN '星期五' THEN INCOME END) AS [星期五],
SUM(CASE WEEK WHEN '星期六' THEN INCOME END) AS [星期六],
SUM(CASE WEEK WHEN '星期日' THEN INCOME END) AS [星期日]FROM WEEK_INCOME

分页获取数据:

友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有