这里行转列的基本思想就是使用max,因为其他列下面都是NULL,所以可以Max最后就只能得到有值的这行

普通的查询:

SELECT
icd ,
case when
(ROW_NUMBER() OVER(PARTITION BY INNER_CD ORDER BY SLIDE_SEQ )) = then SLIDE_QTY END as SLIDE_QTY1,
case when
(ROW_NUMBER() OVER(PARTITION BY INNER_CD ORDER BY SLIDE_SEQ )) = then SLIDE_S_UNIT_PRICE END as SLIDE_S_UNIT_PRICE1,
case when
(ROW_NUMBER() OVER(PARTITION BY INNER_CD ORDER BY SLIDE_SEQ )) = then SLIDE_QTY END as SLIDE_QTY2,
case when
(ROW_NUMBER() OVER(PARTITION BY INNER_CD ORDER BY SLIDE_SEQ )) = then SLIDE_QTY END as SLIDE_QTY3 FROM
"temp"."user" mm
WHERE
mm.icd = 'ADDM01-20160612-1-100002-001'

得到的数据是:

使用max后:

SELECT
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY1,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY2,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY3,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY4,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY5,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY6,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY7,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY8,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY9,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY10
FROM
user
WHERE
anken_id = 'ADDM01-20160612-1-100002-001'

得到的结果:

然后可以通过子查询进行组合

    SELECT * from
m_product INNER JOIN
( SELECT
anken_id,
icd,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY1,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY2,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY3,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY4,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY5,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY6,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY7,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY8,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY9,
MAX( case when SLIDE_SEQ = THEN SLIDE_QTY END )as SLIDE_QTY10
FROM
user
WHERE
user.anken_id = 'ADDM01-20160612-1-100002-001'
GROUP BY user.inner_cd,user.anken_id) t1 on m_product.anken_id = t1.anken_id
where t1.anken_id = 'ADDM01-20160612-1-100002-001'

就可以得到富含行转列数据的。

列转行的基本思路就是通过制定一个共同的字段,然后将查询来的数据一行一行的累加起来。

    SELECT
aa,
bb,
c_1 AS cCount
FROM
TEMP .AAAA
WHERE
TEMP .AAAA.Id = 'ADDM01201606120001'
UNION ALL
SELECT
aa,
bb,
c_2 AS cCount
FROM
TEMP .AAAA
WHERE
TEMP .AAAA.Id = 'ADDM01201606120001'
UNION ALL
SELECT
aa,
bb,
c_3 AS cCount
FROM
TEMP .AAAA
WHERE
TEMP .AAAA.Id = 'ADDM01201606120001'

postgresql 行转列,列转行后加入到一个整体数据的更多相关文章

  1. SQL Server 行转列,列转行。多行转成一列

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...

  2. postgresql行转列

    问:怎么分页&&按条件&&按顺序&&姓名不重复查出数据? 答:其实就是行转列,那么,postgresql怎么进行转列呢,百度了下,大概有三种写法 写法1 ...

  3. SQL进阶-行转列&列转行

    一.行转列 1.建表 CREATE TABLE score( student_id ) NOT NULL COMMENT '学生编号' DEFAULT '', student_name ) NOT N ...

  4. Sql server 中将数据行转列列转行(一)

    在做一些数据分析与数据展示时,经常会遇到行转列,列转行的需求,今天就来总结下: 在开始之前,先来创建一个临时表,并且写入一些测试数据: /* 第一步:创建临时表结构 */ CREATE TABLE # ...

  5. Sql server 中将数据行转列列转行(二)

    老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName ), --学生名称 ...

  6. Greenplum 行存、列存,堆表、AO表的原理和选择

    转载自: https://github.com/digoal/blog/blob/master/201708/20170818_02.md?spm=a2c4e.11153940.blogcont179 ...

  7. MYSQL 多行转多列

    mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行),我觉得这都是一个意思 数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现: 第一 ...

  8. Oracle 多行变一列的方法

    多行变一列的方法有很多,觉得这个第一眼看懂了当时就用的这个办法. 情况是这样的.以下数据前几列是一样的,需要把VAT_VALUE_CHAR 的值放在同一行上. SELECT * FROM ps_vat ...

  9. 用VBA计算WPS 表格ET EXCEL中的行数和列数的多重方法

    用VBA计算WPS 表格ET EXCEL中的行数和列数 每种方法中上面的是Excel的行数,下面的是Excel的列数. 方法1: ActiveSheet.UsedRange.Rows.Count Ac ...

随机推荐

  1. Android批量插入数据到SQLite数据库

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...

  2. EF架构随心所欲打造属于你自己的DbModel【转】

    前言 我们都知道EF可以生成Dbmodel,系统生成的Model有时候并不是我们想要的,如何我们要生成自己的Model,那么久需要我们手动的去修改T4模版,T4是对“Text Template Tra ...

  3. Spark常见错误汇总

    1. Spark Driver cannot bind on port0, SparkContext initialized failed 如果是通过spark-submit等命令行提交的任务,在sp ...

  4. vijosP1164 曹冲养猪

    vijosP1164 曹冲养猪 链接:https://vijos.org/p/1164 [思路] 数学. 如果x不能满足模公式则+gcd,gcd=a的积(a互质)使加上gcd后依然满足前面的模公式. ...

  5. node系列3

    网络操作 通过NodeJS,除了可以编写一些服务端程序来协助前端开发和测试外,还能够学习一些HTTP协议与Socket协议的相关知识 开门红 使用NodeJS内置的http模块简单实现一个HTTP服务 ...

  6. Dumpbin的使用方法

    推荐:http://blog.csdn.net/blpluto/article/details/5706757

  7. Docker系列(四)Dockerfile

    基本语法 使用 #来注释 FROM 指令告诉Docker使用哪个镜像作为基础 接着是维护者信息 RUN 开头的指令会在创建中运行,比如安装软件包 FROM 格式: FROM<image>或 ...

  8. HW4.44

    public class Solution { public static void main(String[] args) { double randX; double randY; int hit ...

  9. Codeforces 295C Greg and Friends

    BFS+DP.dp[i][j][0]表示有i个50kg,j个100kg的人在左岸,dp[i][j][1]表示有i个50kg,j个100kg的人在右岸.用BFS求最短路的时候记录到达该状态的可能情况. ...

  10. 用g++ 编译 ffmpeg 编译出现 error: 'UINT64_C' was not declared in this scope 或 missing -D__STDC_CONSTANT_MACROS

    在 libavutil/common.h 下 添加如下,即可解决 #ifdef __cplusplus#define __STDC_CONSTANT_MACROS#ifdef _STDINT_H#un ...