对于多个列的转行(一个值均匀分布在两个列中),对于个别字段通过取别名,join方式解决。
解决 一个 方式 通过 多个 两个 Join 对于
2023-09-14 08:58:42 时间
例如,这个表的结构:
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的对应关系一样,这样就实现了变成一行。消除了分成多行的影响、
相关文章
- 如何用PostgreSQL解决一个人工智能语义去重的小问题
- 【技术贴】解决127.0.0.1和http://localhost均被拦截跳转到另一个网页
- 测试最重要的是什么?我觉得这个每一个人都没有固定的答案,我觉得测试就像是做人,最重要的是心力,有心力,因为有心力就可以生出智慧来,可以解决很多问题,可能这个回答比较务虚,如果务实的回答就是逻辑,逻辑最重要,
- shidebing——QandA:解决一个需求20171214
- [转] asp.net解决高并发的方案
- 【解决】VMware Workstation中安装ESXI5.0双网卡问题
- 哈希冲突及解决方法
- Java程序出现oom如何解决?什么场景下会出现oom?
- php解决约瑟夫问题
- 出错提示为:该行已经属于另一个表 的解决方法
- 成功解决Exception “unhandled AttributeError“ module ‘cv2.cv2‘ has no attribute ‘estimateRigidTransform‘
- 成功解决type object ‘h5py.h5.H5PYConfig‘ has no attribute ‘__reduce_cython__‘
- 成功解决 将xgboost的plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名
- 成功解决NotImplementedError: numpy() is only available when eager execution is enabled.
- 成功解决Git Bash运行脚本命令下载文件到默认C盘路径的问题
- Springboot是怎么解决跨域问题的?
- 【异常】spring-boot-starter-data-elasticsearch 解决远程主机强迫关闭了一个现有的连接。
- 蓝桥杯嵌入式STM32F103RB MDK Keil 5动态语法标志错误 警告 的解决方式 学习笔记
- c++ - 误删cmake-build-debug ,clion具体解决
- QT软件只允许被打开一个实例的解决方法
- 【架构实践】怎样理解“计算机领域中的所有问题都可以通过增加一个中间层来解决”?
- 解决奇数频分频问题——对设计一个三分频电路,占空比是50%、1/3、2/3;然后根据三分频电路推导出五分频电路,占空比是50%。五分频其他占空比依此类推!其他奇数频以此类推!
- 通过调用约定解决一个常见问题
- 数据分析的12个挑战及解决方法
- 元学习MAML——要解决的问题是给你一堆猫狗图片(训练样本较多),然后给你一类黑天鹅图谱(样本少),让你训练一个模型,能够泛化能力好,识别猫狗和黑天鹅
- NFL原则告诉我们做决策的时候,试图找到一个能解决所有问题,“大而全”的方案是不存在的。我们应当找到最关心的问题,因地制宜做出选择。——聚焦目标,取舍有道!
- 分成两栏后文字顺序混乱的问题解决【写期刊论文时】
- 无法定位程序输入点__gxx_personality_v0的一个解决方法