例如,这个表的结构:

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. JavaScriptSerializer序列化时间处理

    JavaScriptSerializer序列化时间后会把时间序列化成N进制的鬼数据,于是查了下质料坐下记录 假设list = News List<Text>(){new Text(){id ...

  2. JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)

    import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import java.util.Queue; ...

  3. 【代码笔记】iOS-标题2个图标,点击的时候,页面跳转

    一,效果图. 二,工程图. 三,代码 RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  4. ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

    本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...

  5. ORACLE查看数据文件包含哪些对象

    在上篇ORACLE查看表空间对象中,我介绍了如何查询一个表空间有那些数据库对象,那么我们是否可以查看某个数据文件包含那些数据库对象呢?如下所示 SELECT  E.SEGMENT_TYPE       ...

  6. Java Security:Java加密框架(JCA)简要说明

    加密服务总是关联到一个特定的算法或类型,它既提供了密码操作(如Digital Signature或MessageDigest),生成或供应所需的加密材料(Key或Parameters)加密操作,也会以 ...

  7. coursera机器学习笔记-多元线性回归,normal equation

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  8. 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作

    CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...

  9. Linux 引导修复

    前些天,我的Ubuntu老提示"Filesystem root"空间不足,于是,我煞笔的用win pe去扩展空间,结果,空间扩展不成,反倒丢失了引导..... 于是就上网查资料,看 ...

  10. addrinfo 结构

    typedef struct addrinfo {int             ai_flags;int            ai_family;int             ai_sockty ...