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 ...
随机推荐
- 浅谈 HTML5 的 DOM Storage 机制 (转)
在开发 Web 应用时,开发者有时需要在本地存储数据.当前浏览器支持 cookie 存储,但其大小有 4KB 的限制.这对于一些 Ajax 应用来说是不够的.更多的存储空间需要浏览器本身或是插件的支持 ...
- poj 1184 广搜进阶题
起初的想法果然就是一个6000000的状态的表示. 但是后面觉得还是太过于幼稚了. 可以看看网上的解释,其实就是先转换位置,然后再改变数字的大小. #include<iostream> # ...
- EPUB弹出窗口式脚注
网上搜到一些国学典籍的EPUB版,虽有古人的注解,但正文和注解混排在一起,当我只想迅速读正文的时候比较碍眼.于是研究了一下 EPUB3 中有关脚注(footnote)的规格定义,写了一个 Python ...
- html的两种提交按钮submit和button
转自:http://baiying.blog.51cto.com/1068039/1319784 html按钮有两种: <input type="button" value= ...
- .Net 提交页面,js修改的Label值会丢掉
<head id="Head1" runat="server"> <script src="../Jquery/jquery-1.1 ...
- VS2010+WINDBG+VMWARE9.0和fatal error RC1106: invalid option: -ologo错误
提供属性配置文件一份: http://pan.baidu.com/s/1iS1Ix <?xml version="1.0" encoding="utf-8" ...
- linux内核申请内存函数
kmap函数: 把某块高端内存映射到页表,然后返回给用户一个填好vitual字段的page结构 建立永久地址映射,不是简单的返回virtual字段的pageioremap: 驱动程序 ...
- Bzoj 1565: [NOI2009]植物大战僵尸 最大权闭合图,拓扑排序
题目: http://cojs.tk/cogs/problem/problem.php?pid=410 410. [NOI2009] 植物大战僵尸 ★★★ 输入文件:pvz.in 输出文件:p ...
- linux下mysql的表名问题
最近从win转移到了linux,在本机跑好的程序但在linux下一个SQL语句报了错误,发现是表名未找到,错误原因是在linux下mysql的表名是严格区分大小写的.. MYSQL在LINUX下数据库 ...
- Redis 数据库结构设计
Redis设计参考资料: http://my.oschina.net/fsmwhx/blog/152130 http://my.oschina.net/1123581321/blog/164288 h ...