对于多个列的转行(一个值均匀分布在两个列中),对于个别字段通过取别名,join方式解决。
例如,这个表的结构:
select r.*
from
RPDATA2016 r
WHERE r.data_bbid='HY052'
如图

对于最后两列,如果是字符类型,会存在倒数第二列,是数字类型,会存在最后一列,现在要把他们放在一行,行转列。通过这种方式:
SELECT
sum(case r.data_lord when '0001#' then r.data_data else null end ) 序号,r.data_dataid,
gs.lsbzdw_dwmc 单位名称,r1.data_text 负责人,
sum(case r.data_lord when '0004#' then r.data_data else null end ) 年度目标收入,
sum(case r.data_lord when '0005#' then r.data_data else null end ) 年度净利润,sum(case r.data_lord when '0006#' then r.data_data else null end ) 月度目标收入,
sum(case r.data_lord when '0007#' then r.data_data else null end ) 月度目标利润,sum(case r.data_lord when '0008#' then r.data_data else null end ) 月止收入,
sum(case r.data_lord when '0009#' then r.data_data else null end ) 月止利润,sum(case r.data_lord when '0010#' then r.data_data else null end ) 本月销售收入,
sum(case r.data_lord when '0011#' then r.data_data else null end ) 月收入百分比,sum(case r.data_lord when '0012#' then r.data_data else null end ) 月收上年同期,
sum(case r.data_lord when '0013#' then r.data_data else null end ) 月收上年增长比,sum(case r.data_lord when '0014#' then r.data_data else null end ) 会利润,
sum(case r.data_lord when '0015#' then r.data_data else null end ) 会利百分比,sum(case r.data_lord when '0016#' then r.data_data else null end ) 会利上年同期,
sum(case r.data_lord when '0017#' then r.data_data else null end ) 会利同期增长比,sum(case r.data_lord when '0018#' then r.data_data else null end ) 会利增,
sum(case r.data_lord when '0019#' then r.data_data else null end ) 会利减,sum(case r.data_lord when '0042#' then r.data_data else null end ) 税月数,
sum(case r.data_lord when '0020#' then r.data_data else null end ) 税月数,
sum(case r.data_lord when '0021#' then r.data_data else null end ) 考利月,sum(case r.data_lord when '0022#' then r.data_data else null end ) 考利百分,
sum(case r.data_lord when '0023#' then r.data_data else null end ) 考利上年同期,sum(case r.data_lord when '0024#' then r.data_data else null end ) 考利同期增长,
sum(case r.data_lord when '0025#' then r.data_data else null end ) 收入月止,sum(case r.data_lord when '0026#' then r.data_data else null end ) 收入月止百分,
sum(case r.data_lord when '0027#' then r.data_data else null end ) 收入月止上年同期,sum(case r.data_lord when '0028#' then r.data_data else null end ) 收入月止同期增,
sum(case r.data_lord when '0029#' then r.data_data else null end ) 会利月止,sum(case r.data_lord when '0030#' then r.data_data else null end ) 会利月止百分,
sum(case r.data_lord when '0031#' then r.data_data else null end ) 会利月止上年同期,sum(case r.data_lord when '0032#' then r.data_data else null end ) 会利月止同期增,
sum(case r.data_lord when '0033#' then r.data_data else null end ) 会利月止调增,sum(case r.data_lord when '0034#' then r.data_data else null end ) 会利月止调减,
sum(case r.data_lord when '0035#' then r.data_data else null end ) 考利月止,sum(case r.data_lord when '0036#' then r.data_data else null end ) 考利月止百分,
sum(case r.data_lord when '0037#' then r.data_data else null end ) 考利月止上年同期,sum(case r.data_lord when '0038#' then r.data_data else null end ) 考利月止同期增,
sum(case r.data_lord when '0039#' then r.data_data else null end ) 全年收入百分比,sum(case r.data_lord when '0040#' then r.data_data else null end ) 全年会利百分比,
sum(case r.data_lord when '0041#' then r.data_data else null end ) 全年考核金利润百分比 from
RPDATA2016 r
left join RPDATA2016 r1 on r1.data_lord='0003#' and r1.data_bbid=r.data_bbid and r1.data_dataid=r.data_dataid and r1.data_kjqj=r.data_kjqj and r1.data_hord=r.data_hord
JOIN LSBZDW GS ON GS.LSBZDW_DWBH =r.data_dataid
WHERE r.data_bbid='HY052'
group by r.data_dataid,gs.lsbzdw_dwmc,r1.data_text
原理是:行转列。但是对于倒数第二列的某几个值,应为是字符型,所以,不能用sum。但是如果直接放到字段里就会因为group by的原因。而分成几行。
如图:

原因就是单位名称这个字段不能sum,只能group by,但是又不全部与dataid对应,所以就会分成几行。
所以要使得不分行,就使这个字段与其前面的几列要全部对应,我想的办法是把这个字段取出来,然后通过这个表的别名,join上去。这样就会使得对应的列的行都有一个单位名称值对应。
跟DATA_DATAID与DATA_BBID的对应关系一样,这样就实现了变成一行。消除了分成多行的影响、

对于多个列的转行(一个值均匀分布在两个列中),对于个别字段通过取别名,join方式解决。的更多相关文章
- C#比较两个对象中的指定字段值是否相等
一.创建CompareFieldAttribute标识要比较的字段 using System; namespace CompareObjField { /// <summary> /// ...
- NULL值比较,两个列的合并,列值按条件替换。
show create table 表名 -- 显示创建表的sql语句. 为已有的表增加新列.alter table 表名 add 列名 int NULL -- 此行加了一个int 类型 默认可以nu ...
- 给定一个值S,在有序数组中找出两个元素A和B,使 A+B = S.
在网上看到过一个面试题,感觉挺有意思,看别人的代码写的逻辑不够谨慎,重写了一个,较真了又... package com.array7.algorithm; public class Algorithm ...
- 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表中为标识列指定显式值问题
今天在处理数据库过程中碰到这样的问题在插入一条数据到表中 系统报这样的错误 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表中为标识列指定显式值问题 表有一列是自增长的 ...
- 七、如何在Java中高效检查一个数组是否含有一个值
如何检查一个数组(非排序的)是否包含特定的值.这是个非常有用或经常被在Java中使用.这是个在Stack Overflow中高得票的问题.在已经高得票的答案中,有许多不同的处理方法,但是时间的复杂度非 ...
- Mysql按照字段值做分组行转列查询
今天做个后台服务,有个需求是批量生成一批表的数据,如果用BulkInsert会提升很大一截提交效率,但是如果用循环构造提交的Datable,则算法开销太高,所以用这种查询批量查出符合格式的DataTa ...
- 利用substring()方法,把一个表的不同分级所对应的字段名取出来。
实例:现在有一个物料分类的表.知道表的第四级的值,要取前面的2,3级值. 例如,如图所示: 可以通过取前面几个字段的值,得到对应级别的值.利用substring(),但是因为要写在一句话里. 因此可以 ...
- 实现Django ORM admin view中model字段choices取值自动更新的一种方法
有两个表,一个是记录网站信息的site表,结构如下: CREATE TABLE `site` ( `id` ) unsigned NOT NULL AUTO_INCREMENT, `name` ) N ...
- geotrellis使用(十七)使用缓冲区分析的方式解决单瓦片计算边缘值问题
Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 需求分析 实现方案 总结 一.前言 最 ...
随机推荐
- Lock同步锁--线程同步
Lock-同步锁 Lock是java5提供的一个强大的线程同步机制--通过显示定义同步锁对象来实现同步.Lock可以显示的加锁.解锁.每次只能有一个线程对lock对象加锁. Lock有ReadLock ...
- socket编程中服务器端常用函数 以及简单实现
1 常用函数 1.1 socket() int socket(int family, int type, int protocol); socket()打开一个网络通讯端口,如果成功的话,返回一个 ...
- 项目管理之道--纪我的新书《PMP项目管理认证学习指南(第4版)》出版并预祝大卖!
新年伊始,我最新的项目管理书籍——<PMP项目管理认证学习指南(第4版)>也出版了,真是新年新气象啊!翻译英文书籍是一件任重道远的工作,除了要具备扎实的基本功,熟悉相关的领域外,还需要细致 ...
- windows server 开机自动登录并锁定
这个操作对于广大使用Windows(包括xp/win7/2003/2008 R2 等windows 系统) 的上班族会有点用. 其一:如果是个人吧系统(win7.xp)上班时候打开电脑,自动登录,系统 ...
- 学C#你应该熟练使用ILDasm和Reflector【带视频教程】
我们在学习C#的时候通常都会多多少少接触ILDasm和Reflector,这两样工具让我们对C#的理解不会只停留在编译器这个层面 上,而是让我们更深入的穿透编译器.这篇也是希望对IL和Reflecto ...
- 弹出层在兼容模式和IE8模式下显示不正常
弹出层在火狐.谷歌.360极速模式.IE6下都能100%面积正常显示,但在IE8和360的兼容模式下只显示弹出层下半部分或右半部分的内容,在主页面加上: <meta http-equiv=&qu ...
- 编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt
package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep ...
- 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作(二)
CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...
- python基础(三)序列
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢thunder424纠错 sequence 序列 sequence(序列)是一 ...
- js判断游览器是移动端还是PC端
js判断网页游览器是移动端还是PC端 <script type="text/javascript"> function browserRedirect() { var ...