sql行转列应用

作者: 一名程序猿 | 来源:发表于2019-03-20 18:32 被阅读64次

sql行转列应用

数据表实际存储格式


原始表

为了适应我们某个平台框架的使用(该框架直接配置sql,平台自动实现数据的返回。不写任何后端代码),同时方便前端不做任何处理。就采用sql的方式对元数据进行-行转列运用。
需求:


返回前端的数据结构
需求翻译:同一个因子,对应两个监测值,一个是value,一个是aqi。需要将同一时间,不同的监测因子以及监测因子对应的两个值,转为一行返回给前端。

解决方案

1.利用PIVOT函数(简单方便)
SELECT
  t1. TIME,
  t1.no2aqi,
  t1.so2aqi,
  t1.coaqi,
  t2.no2value,
  t2.so2value,
  t2.covalue
FROM
  (
      SELECT
          [so2] AS so2aqi,
          [no2] AS no2aqi,
          co AS coaqi,
          TIME
      FROM
          (
              SELECT
                  t.[name],
                  t.[aqi],
                  t. TIME
              FROM
                  test_aqi t
          ) p PIVOT (
              MAX ([aqi]) FOR [name] IN ([so2], [no2], co)
          ) AS pvt
  ) t1
LEFT JOIN (
  SELECT
      [so2] AS so2value,
      [no2] AS no2value,
      co AS covalue,
      TIME
  FROM
      (
          SELECT
              t.[name],
              t.[value],
              t. TIME
          FROM
              test_aqi t
      ) p PIVOT (
          MAX ([value]) FOR [name] IN ([so2], [no2], co)
      ) AS pvt
) t2 ON t1.[time] = t2.[time]
PIVOT函数运行实现

简单兼完美的实现

2.利用子查询实现
SELECT
  t.[time],
  (
      SELECT
          h.aqi
      FROM
          test_aqi h
      WHERE
          h. TIME = t.[time]
      AND h.name = 'no2'
  ) AS no2aqi,
  (
      SELECT
          h.aqi
      FROM
          test_aqi h
      WHERE
          h. TIME = t.[time]
      AND h.name = 'so2'
  ) AS so2aqi,
  (
      SELECT
          h.aqi
      FROM
          test_aqi h
      WHERE
          h. TIME = t.[time]
      AND h.name = 'co'
  ) AS coaqi,
  (
      SELECT
          h.
      VALUE

      FROM
          test_aqi h
      WHERE
          h. TIME = t.[time]
      AND h.name = 'no2'
  ) AS no2value,
  (
      SELECT
          h.
      VALUE

      FROM
          test_aqi h
      WHERE
          h. TIME = t.[time]
      AND h.name = 'so2'
  ) AS so2value,
  (
      SELECT
          h.
      VALUE

      FROM
          test_aqi h
      WHERE
          h. TIME = t.[time]
      AND h.name = 'co'
  ) AS covalue
FROM
  test_aqi t
GROUP BY
  t. TIME
子查询执行结果

与直接使用函数相比,代码量多了一点,也算是方便。

相关文章

  • SQL Server行转列

    SQL行转列 经典实例 创建表格 SQL行转列 经典实例 创建表格 行转列 结果 参考链接

  • sql行转列应用

    sql行转列应用 数据表实际存储格式原始表为了适应我们某个平台框架的使用(该框架直接配置sql,平台自动实现数据的...

  • SqlServer 行转列

    1 建表,添加测试数据 表数据如下图: 行转列sql 行转列如下图: 2 建表,添加测试数据 表数据如下: 行转列...

  • SQL 行转列

    对于这样一个表: 查询出这样一个结果: 这是怎样一个原理呢?去掉这个SQL最后边的group by name,查询...

  • Sql 行转列

    实现效果 原始数据 转换后数据 示例代码

  • 数据库表行列转换

    行转列 创建表kecheng,并插入数据 查询该表,结构显示: 通过sql查询显示下图: SQL_A: SQL_B...

  • sql行转列,列转行

    行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL ...

  • Power Query 系列 (08) - 行转列案例

    行转列是一种常见的数据处理操作,所以对如何在 SQL 语句中、如何在 pandas 中实现这种行转列做过一些总结。...

  • SQL行转列-列转行

    SQL行转列-列转行 一、行转列 建表语句 插入数据 查询数据表中的内容(即转换前的结果) 先来看一下转换后的结果...

  • mysql开发技巧笔记

    行转列 结果 使用 SUM 进行 行转列 列转行 应用场景 属性拆分 etl数据处理 1. 利用序列表处理列转行的...

网友评论

    本文标题:sql行转列应用

    本文链接:https://www.haomeiwen.com/subject/dertvqtx.html