数据库环境:SQL SERVER 2008R2

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

  id           int,

  num       int

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

连续的2行记录,如果后一行的num值比前一行的num值大,则是递增趋势,反之,是递减趋势。要实现的效果如下图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

根据“坐标”生成趋势图相关推荐

  1. java 生成趋势图_JFreeChart折线图的生成方法

    JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计.JFreeChar ...

  2. 通过VBA在excel中实现股票历史数据查询和K线趋势图绘制(完整的excel原件可以在我的资源中下载)

    原始文件下载地址:股票历史数据和K线图趋势线的绘制-VB文档类资源-CSDN下载 文章目录 前言 一.目标 二.方法 三.界面和使用说明 四.代码说明 1.查询历史数据 2.绘制K线图和趋势线 3.清 ...

  3. 大数据分析如何在Python中生成FiveThirtyEight图

    大数据分析如何在Python中生成FiveThirtyEight图?如果你阅读大数据分析文章,则可能已经迷失了FiveThirtyEight的内容.自然,他们的出色可视化使你印象深刻.你想制作自己的出 ...

  4. 计算机表格怎么求面积,在wps表格中怎么把数据生成面积图?

    面积图强调数量随时间而变化的程度,适用于显示有限数量的若干组数据.可以利用面积图来分析销售的数据.在这里我用3种品牌的手提电脑在 2010年四个季度的销售量作为数据源,使用"堆积面积图&qu ...

  5. cad高程如何提取到cass软件_从CAD平面图中提取坐标生成数据表

    功能:在CAD中提取点的三维坐标(提取当前坐标系中坐标)直接生成Excel表,并在CAD图中生成坐标数据表,加了标点号和输出的选项.   如何安装: 1,在CAD平面图中→工具→宏→加载工程→加载下载 ...

  6. python怎么画出好看的统计图_python数据可视化之如何用matplotlib画出漂亮美观的趋势图...

    这几天完成了一个小项目,matplotlib画出的图像总是不理想,很多细节需要调节,譬如横坐标的控制.图例的控制.周边留白的控制还有图片大小尺寸的控制,都需要根据业务需求来调整. 下面我一步步来说明 ...

  7. matlab 分类学习工具箱 Classification Learner的使用及导出其生成的图,混淆矩阵confusion matrix的画法

    声明:转自https://blog.csdn.net/qq_27914913/article/details/71436838 https://blog.csdn.net/evil_xue/artic ...

  8. 【Echarts】折线图/趋势图区间框选计算

    针对折线图类的趋势图,以时间为横坐标,根据用户图形的区域框选可实时计算框选范围内的均值.总量或其他数据,具体实现代码如下: let xData = ['2022-05-01', '2022-05-02 ...

  9. OpenPose(一):根据关键点生成置信图(Confidence Map)

    最近读了Openpose论文,关于OpenPose的相关资料,博主整理后,留下了一个传送门,将网上写的比较好的博文和github地址记录在传送门里. 文章目录 一.置信图(Confidence Map ...

最新文章

  1. 短信网址价值不大不应被热炒
  2. vue 二维数组_最近研究Vue源码时我发现的一些好玩函数
  3. JavaSE 6之脚本引擎让程序如虎添翼
  4. 从排序数组中删除重复项
  5. 程序员的国庆节如何安排,你想好了吗?
  6. 操作Checkbox标签
  7. linux启用ipmi服务,使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理
  8. Redis安装及配置(Linux)
  9. java通过+拼接字符串导致的无效SQL,三目运算符与+运算符结合使用时需要注意了
  10. [HNOI2016]序列(莫队,RMQ)
  11. Xlim函数--Matplotlib
  12. 这7个摄影构图技巧,可能会帮你拍出好看照片!你学会了吗?
  13. 约瑟夫生死者游戏_独立游戏从死者特许经营中夺冠时,游戏玩家获胜
  14. ACP知识域三---干系人管理
  15. 深度学习在训练时对图片随机剪裁(random crop)
  16. 弹出框动态增加input输入框
  17. 华为RH5885H V3服务器采集日志
  18. Android 节操视频播放器jiecaovideoplayer使用
  19. ps奥顿柔焦效果+提取线稿
  20. Axure学习笔记(三)——交互事件设置

热门文章

  1. hashids php 如何使用,Hashids使用
  2. python querystring encode_百分号 json
  3. vasp算表面吸附流程_VASP实例分析表面吸附计算
  4. python语言入门r_小结:jieba分词的Python与R语言基础用法介绍
  5. loadingcache 有重试机制吗_重试机制的实现
  6. PCL:最小特征值与特征向量为什么可以表示法向量??
  7. 三门问题(蒙提霍尔悖论)的Python代码实现
  8. 网络流Dinic cur当前弧优化
  9. python字符串基本形式_python字符串常用方式
  10. ml不是内部或外部命令_美国飞机制造商波音公司采用VR技术训练宇航员 ; Snap Lens Studio推出支持自定义ML驱动的Snapchat镜头...