例如,这个表的结构:

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方式解决。的更多相关文章

  1. C#比较两个对象中的指定字段值是否相等

    一.创建CompareFieldAttribute标识要比较的字段 using System; namespace CompareObjField { /// <summary> /// ...

  2. NULL值比较,两个列的合并,列值按条件替换。

    show create table 表名 -- 显示创建表的sql语句. 为已有的表增加新列.alter table 表名 add 列名 int NULL -- 此行加了一个int 类型 默认可以nu ...

  3. 给定一个值S,在有序数组中找出两个元素A和B,使 A+B = S.

    在网上看到过一个面试题,感觉挺有意思,看别人的代码写的逻辑不够谨慎,重写了一个,较真了又... package com.array7.algorithm; public class Algorithm ...

  4. 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表中为标识列指定显式值问题

    今天在处理数据库过程中碰到这样的问题在插入一条数据到表中 系统报这样的错误 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表中为标识列指定显式值问题 表有一列是自增长的 ...

  5. 七、如何在Java中高效检查一个数组是否含有一个值

    如何检查一个数组(非排序的)是否包含特定的值.这是个非常有用或经常被在Java中使用.这是个在Stack Overflow中高得票的问题.在已经高得票的答案中,有许多不同的处理方法,但是时间的复杂度非 ...

  6. Mysql按照字段值做分组行转列查询

    今天做个后台服务,有个需求是批量生成一批表的数据,如果用BulkInsert会提升很大一截提交效率,但是如果用循环构造提交的Datable,则算法开销太高,所以用这种查询批量查出符合格式的DataTa ...

  7. 利用substring()方法,把一个表的不同分级所对应的字段名取出来。

    实例:现在有一个物料分类的表.知道表的第四级的值,要取前面的2,3级值. 例如,如图所示: 可以通过取前面几个字段的值,得到对应级别的值.利用substring(),但是因为要写在一句话里. 因此可以 ...

  8. 实现Django ORM admin view中model字段choices取值自动更新的一种方法

    有两个表,一个是记录网站信息的site表,结构如下: CREATE TABLE `site` ( `id` ) unsigned NOT NULL AUTO_INCREMENT, `name` ) N ...

  9. geotrellis使用(十七)使用缓冲区分析的方式解决单瓦片计算边缘值问题

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 需求分析 实现方案 总结 一.前言        最 ...

随机推荐

  1. iOS 单例传值遇见问题

    单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...

  2. iOS--XML三种解析方法( XMLDictionary)、(GDataXMLNode)、(NSXMLParser)

    iOS9之后,默认网络请求是https,所有我们要设置一下网络安全,具体设置如下 1.第三方类库 XMLDictionary 下载地址: https://github.com/nicklockwood ...

  3. TFS2012 服务器安装

    配置: 华硕Z97-A I7 4790K 2*2T 4*8G 操作系统: Win2012 标准 SN: DBGBW-NPF86-BJVTX-K3WKJ-MTB6V http://dinghuqiang ...

  4. 使用Gradle构建构建一个Java Web工程及持续集成环境Jenkins配置

    安装Eclipse插件——Buildship 什么是Buildship? Buildship能方便我们通过Eclipse IDE创建和导入Gradle工程,同时还能执行Gradle任务. Eclips ...

  5. 编写一个Car类,具有String类型的属性品牌,具有功能drive; 定义其子类Aodi和Benchi,具有属性:价格、型号;具有功能:变速; 定义主类E,在其main方法中分别创建Aodi和Benchi的对象并测试对象的特 性。

    package com.hanqi.test; public class Car { //构造一个汽车的属性 private String name; //创建getter和setter方法 publ ...

  6. MYSQL 数据库导入导出命令

    MySQL命令行导出数据库 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serve ...

  7. 朝花夕拾之--大数据平台CDH集群离线搭建

    body { border: 1px solid #ddd; outline: 1300px solid #fff; margin: 16px auto; } body .markdown-body ...

  8. sql server 2005导出数据到oracle

    一. 在sql server下处理需要导出的数据库 1. 执行以下sql,查出所有'float'类型的字段名,手动将float类型改为decimal(18,4). select 表名=d.name,字 ...

  9. 省级联动(使用ajax实现)

    在博客园学习了很多实用的东西,现在该慢慢开始自己写写博客文章, 由于本人水平有限,刚走出校园的小菜鸟,另外,文章在表述和代码方面如有不妥之处,欢迎批评指正.留下你 的脚印,欢迎评论! 有什么问题,可以 ...

  10. android 利用Path.cubicTo 画 贝塞尔曲线

    Path.cubicTo void android.graphics.Path.cubicTo(float x1, float y1, float x2, float y2, float x3, fl ...