关于竖表转横表的问题

SAP PCE私有云MM02修改物料主数据基本单位报错 当前发现只有改为AAAADL(无量纲)单位时会报错,其他的正常。一开始以为配置的ISO码换算有问题,对配置排查后,排除配置问题。最后发现是PCE当前版本的原因,需要打上NOTE。SAP PCE私有云在没有库存和业务单据的情况下,MM02修改物料主数据基本单位报错“EA CPZP MK000000000000:PCS 不可换为”,详见截图。点击【显示错误】,提示EA CPZP MK000000000000:PCS 不可换为。从SAP FOR ME下载NOTE 3531359,链接。 阅读详情

关于竖表转横表的问题

                                                                                本文作者:dinya

内容摘要:在开发过程,经常遇到一些将表的显示方式进行转换的需求,我们习惯性称之为竖表到横表的转换,本文通过一个例子来简要说明常见的两种竖表转横表的问题。

本文适宜读者范围:Oracle初级,中级

系统环境:

      OS:windows 2000 Professional (英文版)

Oracle:8.1.7.1.0

正文:

在实际的应用中,我们经常遇到需要转换数据显示方式,比如将横表转为竖表,或将竖表转换为横表的情况,如:课程表的显示方式,部门平均工资的排名等情况。下面将将根据两个实例子的需求描述给出两种常见的竖表转横表的解决办法(本例中的数据意思是:一、二、三年级的各科目最高分统计)。

表结构:

create table test_table
(
    grade_id number(8),             --
年级:1、一年级,2、二年级,3、三年级
    subject_name varchar2(30),    --
科目:包含语文、数学、外语、政治等科目
    max_score number(8)             --
最高分
)

表中数据:

SQL> select * from test_table;

 GRADE_ID    SUBJECT_NAME                   MAX_SCORE

        1      语文                                  95

        1      数学                                  98

        2      语文                                  86

        2      数学                                  90

        2      政治                                  87

        3      语文                                  93

        3      数学                                  88

        3      英语                                  88

        3      政治                                  97

9 rows selected.

 

第一种转换方式:

需求描述:查看每个年级在系统中存在的科目信息,并各年级的科目信息按下面的格式显示:

GRADE_ID      SUBJECT_NAME  

         1      语文  数学

    2      语文  数学  政治

     3      语文  数学  英语  政治

分析:在要求得到的结果中,每个年级的科目将变成一条记录,而且每个年级的科目是不固定的。所以考虑写个函数来解决,输入年级信息,使用游标得到该年级的所有科目信息并返回值。

1、建函数:

SQL> create or replace function test_fun(p_grade number) return varchar2 as

  2      v_temp varchar2(100):='';

  3      v_out varchar2(500):='';

  4      cursor c is select a.subject_name from test_table a where a.grade_id=p_grade;

  5  begin

  6      open c ;   --打开游标

  7      loop

  8          fetch c into v_temp;

  9          exit when c%notfound;

 10          v_out:=v_out||'  '||v_temp;

 11      end loop;

 12      close c;      --关闭游标

 13      return v_out;

 14      exception

 15          when others then

 16              return 'An error occured';       

 17  end ;

 18  /

Function created.

 

SQL> create or replace function test_fun(p_grade number) return varchar2 as

  2      v_out varchar2(500):='';

  3      cursor c is select a.subject_name from test_table a where a.grade_id=p_grade;

  4  begin

  5      for v_temp in c loop

  6          v_out:=v_out||'  '||v_temp.subject_name;

  7      end loop;       --系统自动关闭游标

  8      return v_out;

  9      exception

 10          when others then

 11              return 'An error occured';

 12  end ;

 13  /

Function created.

 

2、调用函数得到输入结果:

SQL> select distinct a.grade_id,test_fun(a.grade_id) subject from test_table a

 GRADE_ID            SUBJECT

1        语文  数学

2         语文  数学  政治

3         语文  数学  英语  政治

 

第二种转换方式:

需求描述:要求将表中的年级、科目及最高的信息按照下表的格式显示,如果该年级没开的课程,则其最高分用0表示:

年级       语文          数学         英语      政治

一年级        95           98            0               0

二年级        86           90            0              87

三年级        93           88           88              97

 

分析:该需求将年级的分数及科目信息由纵向转为横向,这样就要针对每个年级的,对其科目进行判断,存在科目则显示科目的最高分,如果不存在显示0。这时候就考虑到使用decode函数来解决。实现如下:

 select
    decode(t.grade_id,1,'
一年级',2,'二年级',3,'三年级') 年级,
    sum(decode(t.subject_name,’
语文’,t.max_score,0)) 语文,
    sum(decode(t.subject_name,'
数学',t.max_score,0)) 数学,
    sum(decode(t.subject_name,'
英语',t.max_score,0)) 英语,
    sum(decode(t.subject_name,'
政治',t.max_score,0)) 政治
from
    test_table t
group by
    t.grade_id

 

需要说明的是,在第一种转换方式中写了两个函数,两个函数实现的是同一个需求,所不同的是,两个函数中游标使用方式不同,地一个函数中手动打开游标,循环结束后要求手动关闭。而后一个函数使用for 循环,循环结束后系统自动关闭光标。在第二种转换方式中,使用了decode函数,关于decode的详细用法,请参考oracle函数相关文档。

总  结:

上面的两种转换方式是在开发中经常遇到的情况,在开发中的其他类似的转换都可以参考上面的转换方式,使用decode,nvl等函数进行一些特别的处理即可得到想要的显示方式.

本文你可以在作者的 Blog 上找到,更多内容请登陆作者的 Blog

作者Blog:  http://blog.csdn.net/dinya2003/
如转载,请保留作者Blog信息.
Fastp实战指南:高效处理fastq数据的质控技巧 本文是Fastp实战指南,详细介绍了如何使用Fastp工具高效处理fastq数据的质控技巧。从数据清洗的必要性、基础命令解析,到高级参数定制、UMI数据处理及批量自动化流程,提供一站式解决方案。Fastp以其“All-in-One”的快速质控能力,帮助用户确保测序数据质量,为后续生物信息学分析奠定可靠基础。 阅读详情

相关推荐

手把手教你用mitmproxy抓包抖音数据流(附Python脚本模板)

本文详细介绍了如何使用mitmproxy抓包抖音数据流,包括环境搭建、证书安装和Python脚本模板。从mitmproxy配置到抖音API解析,提供完整的移动端数据流分析方案,帮助开发者快速掌握数据抓取技术,适用于应用优化、竞品分析和安全审计等场景。

weixin_33670786的博客 269

数据库横表有什么区别

横表是描述数据库结构的两种形式,它们之间的主要区别在于数据的组织方式和用途。2.(长): 是一种非常规结构,其特点是将属性作为行而不是列存储。通常包括实体ID、属性名和属性值三个字段。的优点是可以处理稀疏数据和动态添加属性,适合用于数据仓库和数据挖掘。

Wengzhengcun的博客 6430

Python爬虫实战:模拟登录B站 – 处理Cookie和加密参数

由于B站在登录过程中采用了多种安全措施,包括加密的请求参数和cookie验证,模拟登录成为一项具有挑战性的任务。首先,我们需要获取B站的登录页面,并解析出其中的CSRF令牌和其他隐藏的字段。B站的登录接口通常会包含一些动态的加密参数,我们需要在登录前通过GET请求获取这些信息。本文详细介绍了如何使用Python模拟登录B站,解决加密参数的处理、图形验证码的识别以及登录后的数据抓取。库中的加密方法加密登录请求中的密码。一旦登录成功,我们可以通过维护会话状态,抓取登录后的数据,如个人主页、评论、观看记录等。

2201_76125261的博客 1276

MySQL 横表相互

横表 1. 首先创建 create table student (   id varchar(32) primary key,   name varchar (50) not null,   subject varchar(50) not null,   result int); 2. 插入数据 insert into student (id, name, subject, ...

zhangzhiping35的专栏 1250

mysql_数据库设计---关于建的时候选择横表(纵)的一点思考

在做数据统计类数据库设计的时候,在考虑数据存储的时候,经常会遇到逻辑上同一个BusinessID对应多个数据点的情况,比如工资中的员工ID以及各项工资信息,财务中的各个报Id和多个数据点之间的信息面对这种情况,如何来设计结构,是横表,还是,各有那些优缺点,本文将做一个粗浅的分析。横标和现形式日常生活中也有很多类似的例子,先用一个Excel画一个例子,比如工资这么做就是“横表”...

weixin_35795792的博客 2971

数据库:横表 (GPT4生成)

比如在一个电商平台上,每个商品都有一些共通属性,比如价格、品牌、类别,但同时每种商品还有一些特定的属性,比如手机有屏幕大小、电池容量,衣服有材质、尺寸等。使用横表,你可能需要为每个可能的属性都创建一个列,这将导致非常宽,而且大多数列都是空的。使用,你只需记录商品的共通属性,特定属性可以按需添加。

qq_35529025的博客 592

利用R语言把纵向数据变成横向数据并给新变量重命名

临床研究中,常用EDC系统收集数据。一般导出的数据都是纵向数据,但纵向数据对于广大的临床医生来说并不友好。往往需要手动把纵向数据变为横向数据才能进行数据分析。不仅费时费力,而且容易出现复制粘贴错误。

zsc943290710的博客 1861

关于横表问题

关于横表问题                   内容摘要:在开发过程,经常遇到一些将的显示方式进行换的需求,我们习惯性称之为横表换,本文通过一个例子来简要说明常见的两种横表问题。本文适宜读者范围:Oracle初级,中级系统环境:      OS:windows 2000 Professional (英文版)Oracle:8.1.7.1.0

angle_bear的专栏 1104

java数据横_关于横表问题

内容摘要:在开发过程,经常遇到一些将的显示方式进行换的需求,我们习惯性称之为横表换,本文通过一个例子来简要说明常见的两种横表问题。本文适宜读者范围:Oracle初级,中级系统环境:OS:windows 2000 Professional (英文版)Oracle:8.1.7.1.0正文:在实际的应用中,我们经常遇到需要换数据显示方式,比如将横表,或将换为横表的情...

weixin_42576804的博客 2058

单单单独占一行_知识帖 | 关于标题、图、,新媒体人需要知道这几个细节...

编校标题时应注意的事项标题是文章的重要组成部分,由于内容层次的需要,有大小各级标题,如篇题、章题、节题等等。最大一级的标题就叫做一级标题,依次是二级标题、三级标题……要注意各级标题的字体、字号及排式,必须前后一致,全书统一。为此,有必要对各级标题的字体、字号及排式,作为单一项目,从头到尾专门校对一遍。校对时要做到字字落实,个个看清,避免浮光掠影,一瞥而过。应注意以下几点:1.标题...

weixin_40006779的博客 407

2023.4.4 携程数仓一面(15min左右)

一道是将横表,一道是筛选成绩大于60,获得最高成绩,对应的人,课程,成绩。8.假设场景,如果某天流量突然变化幅度很大,怎么分析原因。9.开头的两道sql题怎么做,说思路,比较简单。5.采集数据过程遇到什么问题,怎么解决。1.上来先在腾讯会议发了两道sql题。4.项目数仓分层怎么建,项目建的5层。6.有没有遇到过数据倾斜,怎么解决。3.项目中的数据量有多大。7.有没有遇到过数据挤压。

cxfool的博客 384

mysql横表横表

SELECT p.姓名p.语文,p.数学,p.英语 from score as a pivot(sum(成绩) for 课程 in(语文,数学,英语)) as p;查询第一行数据,当查询课程列的内容为'语文'时候,then'语文'这个值变为它对应成绩值60,起列名为语文。--使用pivot(这个是sqlserver,mysql不可以使用)第二行数据,课程值为‘数学’时,then'数学'变为70,起列名为数学。无论是横,还是横,原都不变还是原来的样子。score2,此横表

qq_46414039的博客 4126

数据库的横表

【代码】数据库的横表

wang0907的博客 958

Mysql换为横表

通过 case 语句,成功把字段从纵中取出,但是此时仍算不上一个横表,我们这里的original_record_id 是记录同一行数据的唯一ID,我们这里可以通过这个字段把上面这四行合成一行记录。//4、组装动态where查询条件。(2)分组,合并相同行,生成横表。//4、获取老化自动化测试项记录。//3、组装动态max查询字段。//1、获取工模老化字段模板。COUNT() 求列的总数。AVG() 求平均数。MAX() 求最大值。MIN() 求最小值。//2、组装查询条件。//5、组装返回结果。

2401_85112250的博客 1884

横表的概念及其相互

横表就是普通的建方式,如结构为:主键、字段1、字段2、字段3...。 如果变成纵后,则结构为: 主键、字段代码、字段值。而字段代码则为字段1、字段2、字段3...。  具体为电信行业的例子。以用户帐单为例,一般出账时用户有很多费用,其数据一般存储为:时间,客户ID,费用科目,费用。这种存储结构一般称为纵,其特点是行数多,字段少。纵在使用时由于行数多,统计用户数或对用户进行分档时还需要

岁月静好 3万+

SQL 横表

横表的情况有几种,本文是把同一批次的数据用一行显示,显示的是该批次的不同数据类型的数据

u010653281的博客 6178

关于横表

数据库建有两种方式,横表横表是常用的,比较通用的建方式。 但是有些场景用横表不太合适。 比如问卷调查,存储用户的回答,就不太方便使用横表。因为每一次问卷调查,题目数量都不相同。 又比如,配置选项,就不太适合横表,因为配置项随时都可能变化。 这个时候,就可以考虑使用来存储。 横标的优点:横标的有点事显示的较为清晰直观,同时在字段的选择上更为科学合理,具体的字段可以根据具体情况划...

weixin_33924312的博客 692

数据集-地级市数字基础设施评价指标体系数据-含do代码(2000-2023年).txt

因文件较多,数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.csdn.net/T0620514/article/details/161364007

基于SpringCloudAlibaba的Java大宗商品交易平台设计源码

该项目为基于SpringCloudAlibaba框架的Java大宗商品交易平台设计源码,总计包含235个文件,其中Java源代码文件189个,XML配置文件25个,Idea项目配置文件10个,YAML配置文件9个,Git忽略配置文件1个,以及文档文件1个。该系统旨在实现大宗商品交易的功能,是毕业设计的一部分。

上一篇: 数据库安全性策略
下一篇: 关于动态SQL的使用
dinya2003
博客等级 码龄23年 48粉丝 56原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值