这里行转列的基本思想就是使用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. 《C#并行编程高级教程》第5章 协调数据结构 笔记

    本章介绍了一些轻量级的同步原语,其中有很大部分是.NET Framework 4才引入的. System.Threading.Barrier 用于一段程序分成多个阶段,每个阶段的开始都需要之前的阶段完 ...

  2. 一步步写STM32 OS【三】PendSV与堆栈操作

    一.什么是PendSV PendSV是可悬起异常,如果我们把它配置最低优先级,那么如果同时有多个异常被触发,它会在其他异常执行完毕后再执行,而且任何异常都可以中断它.更详细的内容在<Cortex ...

  3. Oracle行转列的函数

    --行转列的函数-- CREATE OR REPLACE FUNCTION Calvin( col IN VARCHAR2,dw IN VARCHAR2) RETURN VARCHAR2 IS ret ...

  4. 对 Linux 专家非常有用的 20 个命令

    原文链接:http://www.oschina.net/translate/20-advanced-commands-for-linux-experts?from=20130811 对中级 Linux ...

  5. [POJ3684]Physics Experiment

      Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1363   Accepted: 476   Special Judge ...

  6. shell 从文件按行读

    #!/bin/shheart=/archlog2/archive_2/heartbeatwhile truedofor file in `cat $heart`;doecho "wei xi ...

  7. virtualenv下配置nginx uwsgi Django

    1.安装virtualenv,创建虚拟环境django15 sudo apt-get install virtualenv virtualenv env source bin/active pip i ...

  8. zabbix 获取不到自定义脚本的值解决

    agent端: zabbix 自定义脚本 [root@localhost script]# cat check_ping.sh #!/bin/bash result=$(/usr/local/nagi ...

  9. 【Java基础】Integer包装类的缓冲池问题

    首先看下面这个例子: public class TestNew { public static void main(String args[]){ Integer i1 = 10; //Integer ...

  10. pm 2.5

    定陵</a></div><div class="staaqi"><span class="label pmsmall" ...