对于多个列的转行(一个值均匀分布在两个列中),对于个别字段通过取别名,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 目录 前言 需求分析 实现方案 总结 一.前言 最 ...
随机推荐
- AWS EC2 复制实例后,自定义指标无法显示数据
从一个实例创建了一个AMI,然后通过这个AMI创建新的EC2实例,结果发票自定义指标不会显示: 系统一直在邮件中提示: print() on closed filehandle MDATA at Cl ...
- centos初始配置
修改语言环境 [root@oracledb ~]# sudo vim /etc/sysconfig/i18n 将将zh_CH修改为"en_US.UTF-8" 搭建yum本地源 参考 ...
- Vysor:在电脑里控制你的安卓手机
Vysor是一款可以使用电脑操作安卓手机的谷歌浏览器插件,在chrome中安装了Vysor插件以后,用户就可以使用电脑打开手机的屏幕,在手机的屏幕界面中,用户不仅可以观看,甚至可以使用电脑直接操作手机 ...
- Android优秀学习资料(高手博客
任玉刚, 博客 : http://blog.csdn.net/singwhatiwanna, github : https://github.com/singwhatiwanna Trinea, 博客 ...
- Android 动态创建Fragment
Fragment是activity的界面中的一部分或一种行为.可以把多个Fragment组合到一个activity中来创建一个多界面并且可以在多个activity中重用一个Fragment.可以把Fr ...
- Android 加载大图片到内存
本文演示android中图片加载到内存 首先设计界面: 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/ap ...
- iOS代码加密常用加密方式
iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...
- 【代码笔记】iOS-利用图片序列创建动态图片效果
一,效果图. 二,代码. RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional se ...
- [原] Android 自定义View步骤
例子如下:Android 自定义View 密码框 例子 1 良好的自定义View 易用,标准,开放. 一个设计良好的自定义view和其他设计良好的类很像.封装了某个具有易用性接口的功能组合,这些功能能 ...
- ios xcode Code signing failed 解决方案
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545; min ...