当前位置: 首页 > 编程日记 > 正文

根据“坐标”生成趋势图

数据库环境:SQL SERVER 2008R2

有一“坐标”表t,表结构如下:

  id           int,

  num       int

字段id是序号,递增且连续,字段num是数值类型。id可以看成是坐标轴的横轴,num则跟纵轴有关系,

连续的2行记录,如果后一行的num值比前一行的num值大,则是递增趋势,反之,是递减趋势。要实现的效果如下图1:

图1

实现思路:

将id=1的“坐标”所在纵轴设定为0,然后遍历后续所有的“坐标”,后面“坐标”的num值比前一个“坐标”的num大的,则纵坐标+1,

否则纵坐标-1。再对整理后的结果集进行行转列,根据纵坐标分组。

1.建表,插入测试数据

CREATE TABLE t(id INT,num INT)
INSERT INTO t VALUES(1,1);
INSERT INTO t VALUES(2,3);
INSERT INTO t VALUES(3,4);
INSERT INTO t VALUES(4,7);
INSERT INTO t VALUES(5,5);
INSERT INTO t VALUES(6,2);
INSERT INTO t VALUES(7,6);
INSERT INTO t VALUES(8,8);
INSERT INTO t VALUES(9,4);
INSERT INTO t VALUES(10,0);
INSERT INTO t VALUES(11,9);
INSERT INTO t VALUES(12,10);
INSERT INTO t VALUES(13,12);
INSERT INTO t VALUES(14,11);
INSERT INTO t VALUES(15,17);
INSERT INTO t VALUES(16,4);
INSERT INTO t VALUES(17,2);
INSERT INTO t VALUES(18,1);
View Code

2.遍历所有“坐标”,生成分组依据

WITH x1 ( id, num, gp )AS ( SELECT   id ,num ,0 AS gpFROM     t x0WHERE    id = 1UNION ALLSELECT   x0.id ,x0.num ,CASE WHEN x0.num > x1.num THEN x1.gp - 1ELSE x1.gp + 1END AS gpFROM     t x0 ,x1WHERE    x0.id = x1.id + 1)
View Code

3.行转列实现最终结果集

SELECT  ISNULL(CAST([1] AS VARCHAR(2)), '') [1] ,ISNULL(CAST([2] AS VARCHAR(2)), '') [2] ,ISNULL(CAST([3] AS VARCHAR(2)), '') [3] ,ISNULL(CAST([4] AS VARCHAR(2)), '') [4] ,ISNULL(CAST([5] AS VARCHAR(2)), '') [5] ,ISNULL(CAST([6] AS VARCHAR(2)), '') [6] ,ISNULL(CAST([7] AS VARCHAR(2)), '') [7] ,ISNULL(CAST([8] AS VARCHAR(2)), '') [8] ,ISNULL(CAST([9] AS VARCHAR(2)), '') [9] ,ISNULL(CAST([10] AS VARCHAR(2)), '') [10] ,ISNULL(CAST([11] AS VARCHAR(2)), '') [11] ,ISNULL(CAST([12] AS VARCHAR(2)), '') [12] ,ISNULL(CAST([13] AS VARCHAR(2)), '') [13] ,ISNULL(CAST([14] AS VARCHAR(2)), '') [14] ,ISNULL(CAST([15] AS VARCHAR(2)), '') [15] ,ISNULL(CAST([16] AS VARCHAR(2)), '') [16] ,ISNULL(CAST([17] AS VARCHAR(2)), '') [17] ,ISNULL(CAST([18] AS VARCHAR(2)), '') [18]FROM    ( SELECT    *FROM      x1) AS t1 PIVOT( MAX(num) FOR id IN ( [1], [2], [3], [4], [5], [6],[7], [8], [9], [10], [11],[12], [13], [14], [15], [16],[17], [18] ) )AS t2
View Code

如果要实现比较逼真的趋势图,用“/”、“\”替代数值,实现下图2的效果,只需在遍历坐标的时候再做些处理即可。

实现的SQL脚本:

WITH    x1 ( id, num, cc, gp )AS ( SELECT   id ,num ,'/' AS cc ,0 AS gpFROM     t x0WHERE    id = 1UNION ALLSELECT   x0.id ,x0.num ,CASE WHEN x0.num > x1.num THEN '/'ELSE '\'END AS cc ,CASE WHEN x0.num > x1.num THEN x1.gp - 1ELSE x1.gp + 1END AS gpFROM     t x0 ,x1WHERE    x0.id = x1.id + 1)SELECT  ISNULL([1], '') [1] ,ISNULL([2], '') [2] ,ISNULL([3], '') [3] ,ISNULL([4], '') [4] ,ISNULL([5], '') [5] ,ISNULL([6], '') [6] ,ISNULL([7], '') [7] ,ISNULL([8], '') [8] ,ISNULL([9], '') [9] ,ISNULL([10], '') [10] ,ISNULL([11], '') [11] ,ISNULL([12], '') [12] ,ISNULL([13], '') [13] ,ISNULL([14], '') [14] ,ISNULL([15], '') [15] ,ISNULL([16], '') [16] ,ISNULL([17], '') [17] ,ISNULL([18], '') [18]FROM    ( SELECT    id ,cc ,gpFROM      x1) AS t1 PIVOT( MAX(cc) FOR id IN ( [1], [2], [3], [4], [5], [6],[7], [8], [9], [10], [11], [12],[13], [14], [15], [16], [17],[18] ) )AS t2
View Code

转载于:https://www.cnblogs.com/boss-he/p/4758151.html

相关文章:

Winform程序怎么降低占用的内存?

1 Winform程序怎么降低占用的内存?winform程序占用的内存数一直居高不下,提供给用户的手册中说明内存不能大于50MB,但是每次运行的时候,内存都会飙高到100多MB. 2 3 后来终于发现了一个方法,可以解决这个问题: …

mysql关系表控制_mysql表关系

一、表的详细操作1.修改表名alter table 旧表名 rename 新表名;​2.修改表的引擎与字符编码alter table 表名 engine"引擎名" charset"编码名";​3.复制表 *#结构create table 新表名 like 旧表名;eg:1create table nt like tt;#将tt的表结构复制到新表nt中…

【Python3爬虫】常见反爬虫措施及解决办法(二)...

【Python3爬虫】常见反爬虫措施及解决办法(二) 这一篇博客,还是接着说那些常见的反爬虫措施以及我们的解决办法。同样的,如果对你有帮助的话,麻烦点一下推荐啦。 一、防盗链 这次我遇到的防盗链,除了前面说…

【原创】ListView快速滚动至新添加一行(自动滚动)

在C#开发中我们经常要开发一些日志系统,尤其是基于ListView的日志显示系统。但是当日志增多是你是否有一些困扰,就是它为什么不会自动滚动至最后一行。以下是一小段代码,希望可以帮助你. public void addLog(string logString) { lock (_lock…

MFC调用CFileDialog之后目录居然会改变,调试了好久终于发现是这个问题

MFC调用CFileDialog之后目录居然会改变,调试了好久终于发现是这个问题,上网搜了下,发现也有人和我出现相同的问题。他的博客如下: http://www.programlife.net/current-directory-changed-after-using-cfiledialog.html MFC调用C…

mysqlls_mysql基本命令

1、Mysql启动命令:命令行内容为:\>net start mysql运行情况如图1所示:图1(Mysql启动命令)2、连接Mysql服务器:命令行内容为:\>mysql -u root -h hostaddress -p password其中,root为Mysql的用户名&a…

2019年3月

分包加载 使用公众号登录微信提示  "公众号暂不支持此种登录方式" 使用已经注册过的手机号注册新的微信账号提示  "你申请注册的手机号已被其他微信号绑定,暂时不能使用该手机号注册" https://github.com/witcat/LayaWxCacheFromZip /******/ (functio…

8天学通MongoDB——第三天 细说高级操作

原文地址:http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html 今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标。 一: 聚合 常见的聚合操作跟sql server一样,有:count&…

UVA 10954 Add All

UVA_10954 看了别人解题报告之后发现累加的过程可以这样操作,每次取最小的两个元素加和,然后把和当作一个新元素放进集合,直到剩下一个元素,然后把中间结果加起来就是要求的结果。实际上这个题目就是哈弗曼编码,在LRJ树…

Java将mysql输出csv,如何从Java中的Access数据库导出表并将其保存到.csv

I am trying to export a lot of large tables from a MS Access db with java using the jdbc:odbc bridge. I wanted to save these tables to a CSV file first was wondering what would the best way to do this would be? any help would be appreciated.解决方案Fetch …

windows下nodejs express安装及入门网站,视频资料,开源项目介绍

windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件下载地址:官网http://www.nodejs.org/download/ 第二步:安装nodejs下载完…

python 之 pip、pypdf2 安装与卸载

pip是个啥? pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。 第一步:pip 下载:https://pypi.org/project/pip/#files 第二步:解压,进入目录python pip\pi…

eclipse 3.55安装j2ee开发工具

选择help--->install new software -->work width --选择下拉框选择要安装插件转载于:https://www.cnblogs.com/yjhrem/articles/2309602.html

mysql中没有内置函数_[mysql]MySQL中的内置函数

用在select 语句,以及子句where order by hacing 中 update delete函数中可以将字段名作为字段来用,变量的值就是这个列对应的每一行记录。一、字符串函数php中用到的函数,mysql中大部分也提供了1、CONCAT(”字符串”,字段&…

tiny210V2 Uboot kernel filesystem 烧写和启动

1.sd启动 将u-boot镜像写入SD卡 将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是/dev/sdb.执行下面的命令$sudo dd iflagdsync oflagdsync iftiny210-ub…

Linux下Shell日期的格式

2019独角兽企业重金招聘Python工程师标准>>> 不管是哪种语言,日期/时间都是一个非常重要的值。比如我们保存日志的时候,往往是某个前缀再加上当前时间,这样日志文件名称就可以做到唯一。在Shell环境里,我们获取时间的命…

usaco 6.1

6.1.2 rectbarn 首先要注意空间的消耗,3000*3000 大概10m的样子(最多16m),只够开个char,本想套用big barn的dp方法,定义struct [i,j]{int l;int h}来表示以(i,j)为右上顶点的矩形,貌似这样会爆,只好考虑其它解法(参考wc2003王知昆的论文). 大概思路: 定义h[i,j],l[i,j],r[i,j]分…

docker mysql详解_Docker轻松入门(详解)

一 Docker简介Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙…

[恢]hdu 2014

2011-12-12 05:46:08 地址:http://acm.hdu.edu.cn/showproblem.php?pid2014 题意:中文题。 mark:wa了3次!!!因为敲错变量!!!min敲成了num,各种二。可能是困了…

java在继承中父类的成员变量是否会被子类所覆盖

假如 父类 int num 7;子类 int num 9;父类是否会被子类所覆盖? 给你看两个例子: 第一个例子: 第二个例子: 这两个例子的区别只有一句话 由此证明了子类从父类继承的时候 如果有同名的成员变量 默认情况下 父类的成…

长连接及在Node中的应用——HTTP/1.1 keep-alive

HTTP请求都要经过TCP三次握手建立连接,四次分手断开连,如果每个HTTP请求都要建立TCP连接的话是极其费时的,因此HTTP/1.1中浏览器默认开启了Connection: keep-alive。 请求头中的这个属性的作用可以在请求完成后,保持TCP连接一段时…

python 桑基图 地理坐标_【转载】Python数据可视化-实现Sankey桑基图

根据不完整统计,90%想用sankey图的朋友都是因为被它炫酷的外表所吸引,举个例子:在这里插入图片描述关于sankey图的定义是这样描述的:即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延…

[恢]hdu 2015

2011-12-14 05:49:09 地址&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2015 题意&#xff1a;中文&#xff0c;忒麻烦了。 代码&#xff1a; # include <stdio.h>int main (){int n, m, flag ;int i, sum, cnt ;while (~scanf ("%d%d", &n, &a…

http://www.shanghaihaocong.com-WORDPRESS开发的企业主题站

wordpress是世界上使用最多的php开源博客系统&#xff0c;功能强大&#xff0c;而且拥有众多的插件&#xff0c;可扩展性强。 最近&#xff0c;我也用它做了一个企业网站&#xff0c;欢迎浏览&#xff1a;http://www.shanghaihaocong.com&#xff0c;上海灏璁实业有限公司转载于…

蓝桥杯 扑克序列(全排列)

扑克序列 A A 2 2 3 3 4 4&#xff0c; 一共4对扑克牌。请你把它们排成一行。要求&#xff1a;两个A中间有1张牌&#xff0c;两个2之间有2张牌&#xff0c;两个3之间有3张牌&#xff0c;两个4之间有4张牌。 请填写出所有符合要求的排列中&#xff0c;字典序最小的那个。 例如&a…

tensorflow with求导_3.4tensorflow2.x自动求导原理函数详解

自己开发了一个股票智能分析软件&#xff0c;功能很强大&#xff0c;需要的点击下面的链接获取&#xff1a;1.1 tensorflow2.x自动求导1.1.1 自动求导GradientTape类GradientTape的作用就是用于自动求导&#xff0c;需要有自变量x和因变量y&#xff0c;调用gradient(y…

WinRAR也能实现智能备份

日志 唐山郎&#xffe5; 一切随缘,顺其自然.加博友 关注他 最新日志 2012年意味着机会还是灾难墙壁网线插座的接法佛度有缘人我~想~你&#xff0c;但不。会找你asp.net"服务器应用程序不可超惊艳! 古装美女超精美剪辑该作者的其他文章 博主推荐 相关日志 随机阅读 首页推…

MediaCodeC解码视频指定帧,迅捷、精确

原创文章&#xff0c;转载请联系作者 若待明朝风雨过&#xff0c;人在天涯&#xff01;春在天涯 原文地址 提要 最近在整理硬编码MediaCodec相关的学习笔记&#xff0c;以及代码文档&#xff0c;分享出来以供参考。本人水平有限&#xff0c;项目难免有思虑不当之处&#xff0c;…

threejs 绘制球体_ThreeJs 绘制点、线、面

所有的三位物体都是由点构成&#xff0c;两点构成线&#xff0c;三点构成面&#xff0c;ThreeJs又如何绘制出点、线、面呢 &#xff1f;在ThreeJs中&#xff1a;模型由几何体和材质构成模型以何种形式(点、线、面)展示取决于渲染方式1. 几何体首先我们来创建一个自定义的几何体…

model多表操作

一. 创建模型 from django.db import models# Create your models here.#比较常用的作者信息放到这个表里面 class Author(models.Model): id models.AutoField(primary_keyTrue)namemodels.CharField(max_length32)agemodels.IntegerField()authorDetailmodels.OneToOneField…