postgresql 行转列,列转行后加入到一个整体数据
这里行转列的基本思想就是使用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 行转列,列转行后加入到一个整体数据的更多相关文章
- SQL Server 行转列,列转行。多行转成一列
一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...
- postgresql行转列
问:怎么分页&&按条件&&按顺序&&姓名不重复查出数据? 答:其实就是行转列,那么,postgresql怎么进行转列呢,百度了下,大概有三种写法 写法1 ...
- SQL进阶-行转列&列转行
一.行转列 1.建表 CREATE TABLE score( student_id ) NOT NULL COMMENT '学生编号' DEFAULT '', student_name ) NOT N ...
- Sql server 中将数据行转列列转行(一)
在做一些数据分析与数据展示时,经常会遇到行转列,列转行的需求,今天就来总结下: 在开始之前,先来创建一个临时表,并且写入一些测试数据: /* 第一步:创建临时表结构 */ CREATE TABLE # ...
- Sql server 中将数据行转列列转行(二)
老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName ), --学生名称 ...
- Greenplum 行存、列存,堆表、AO表的原理和选择
转载自: https://github.com/digoal/blog/blob/master/201708/20170818_02.md?spm=a2c4e.11153940.blogcont179 ...
- MYSQL 多行转多列
mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行),我觉得这都是一个意思 数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现: 第一 ...
- Oracle 多行变一列的方法
多行变一列的方法有很多,觉得这个第一眼看懂了当时就用的这个办法. 情况是这样的.以下数据前几列是一样的,需要把VAT_VALUE_CHAR 的值放在同一行上. SELECT * FROM ps_vat ...
- 用VBA计算WPS 表格ET EXCEL中的行数和列数的多重方法
用VBA计算WPS 表格ET EXCEL中的行数和列数 每种方法中上面的是Excel的行数,下面的是Excel的列数. 方法1: ActiveSheet.UsedRange.Rows.Count Ac ...
随机推荐
- 《C#并行编程高级教程》第5章 协调数据结构 笔记
本章介绍了一些轻量级的同步原语,其中有很大部分是.NET Framework 4才引入的. System.Threading.Barrier 用于一段程序分成多个阶段,每个阶段的开始都需要之前的阶段完 ...
- 一步步写STM32 OS【三】PendSV与堆栈操作
一.什么是PendSV PendSV是可悬起异常,如果我们把它配置最低优先级,那么如果同时有多个异常被触发,它会在其他异常执行完毕后再执行,而且任何异常都可以中断它.更详细的内容在<Cortex ...
- Oracle行转列的函数
--行转列的函数-- CREATE OR REPLACE FUNCTION Calvin( col IN VARCHAR2,dw IN VARCHAR2) RETURN VARCHAR2 IS ret ...
- 对 Linux 专家非常有用的 20 个命令
原文链接:http://www.oschina.net/translate/20-advanced-commands-for-linux-experts?from=20130811 对中级 Linux ...
- [POJ3684]Physics Experiment
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1363 Accepted: 476 Special Judge ...
- shell 从文件按行读
#!/bin/shheart=/archlog2/archive_2/heartbeatwhile truedofor file in `cat $heart`;doecho "wei xi ...
- virtualenv下配置nginx uwsgi Django
1.安装virtualenv,创建虚拟环境django15 sudo apt-get install virtualenv virtualenv env source bin/active pip i ...
- zabbix 获取不到自定义脚本的值解决
agent端: zabbix 自定义脚本 [root@localhost script]# cat check_ping.sh #!/bin/bash result=$(/usr/local/nagi ...
- 【Java基础】Integer包装类的缓冲池问题
首先看下面这个例子: public class TestNew { public static void main(String args[]){ Integer i1 = 10; //Integer ...
- pm 2.5
定陵</a></div><div class="staaqi"><span class="label pmsmall" ...