热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库一步步处理行列转换

做个东西,发现了些问题,又解决了,很Happy!数据库有2个表:[省份表],2列(provinceId--省的id,provinceName--省名字),[公司表],好几列(companyId--公司Id,provinceId--公司所在省id,recruitType--这个招聘会类型(只有1,2,3这三个值,每个值一个含义),......其

做个东西,发现了些问题,又解决了,很Happy! 数据库有2个表: [省份表],2列(provinceId--省的id,provinceName--省名字), [公司表],好几列(companyId--公司Id,provinceId--公司所在省id,recruitType--这个招聘会类型(只有1,2,3这三个值,每个值一个含义),......其

做个东西,发现了些问题,又解决了,很Happy!

数据库有2个表:

[省份表],2列(provinceId--省的id,provinceName--省名字),

[公司表],好几列(companyId--公司Id, provinceId--公司所在省id, recruitType--这个招聘会类型(只有1,2,3这三个值,每个值一个含义),......其他问题无关列)

------------------------------------------------------------------------------------------------

方法一:(自己写的)

------------------------------------------------------------------------------------------------

我想获得的结果,即每个省按那三个招聘会类型统计各种类型公司的总数,如下:

------------------------------------------------------------------------------------------------

先获得了下面表,省id,招聘会类型,公司总数,这是在[公司表]里面按(省id,招聘会类型)group by和count()得到的,注意这里有个问题,就是[公司表]里面不是什么省份的都有,所以provinceId是不连续的,所以要在后面处理.

------------------------------------------------------------------------------------------------

然后联合[省份表],得到下面的表,这个很容易,只要注意一下 left join,就可以显示所有的省份了

------------------------------------------------------------------------------------------------

现在问题来了,我想显示的目标图是第一个图,就是这么把那些相同省的行合并为同一行,并且有三个列分别显示那三种招聘会类型的公司总数?

我想了半天,因为最终是要在Web上显示的,我想要不就在数据库搞好,把结果直接返回,Web端就不要处理什么了,要不就这样返回吧,在Web端合并相同的行,

但最后发现还是数据库端好处理,因为T-SQL很强大,并且Web端处理这些表格很麻烦,我不知道它那些DataTable啊什么的类似怎么样构造的,遂选择在数据库端处理.

------------------------------------------------------------------------------------------------

1,建立最后想要结果的表,把目标列写好,然后要不insert,要不update

2,用游标一个一个处理上面的那个表,provinceId一样的就update那一行几个值,否则insert新行

3,最后处理一些数据,得到想要结果:

代码量大啊!!!主要用游标一行一行处理的......

ANSI_NULLS QUOTED_IDENTIFIER -- Author: -- Create date: -- Description: 按招聘单位地域统计的数据源 --.(10), @timeTo char(20) (N,N) #tableTemp .provinceId , .recruitType ,COUNT(*) as companySum .recruitTime .provinceId,.recruitType .provinceId (N,N) #newTable .provinceId,.provinceName,#tableTemp.recruitType,#tableTemp.companySum #tableTemp .provinceId=#tableTemp.provinceId .provinceId (N,N) #lastTable #lastTable --创建表最终要返回应用程序的表!!!!注意这里的强大之处!!! ( provinceId , provinceName nvarchar(20) not null, type1Sum , --默认值为0,省去null处理的麻烦 type1Ratio varchar(10), type2Sum , type2Ratio varchar(10), type3Sum , type3Ratio varchar(10), allTypeSum , allTypeRatio varchar(10) ) ,,curToNewTable scroll #newTable open curToNewTable () () #lastTable (provinceId,provinceName) values (@provinceId,@provinceName) ) insert into #lastTable (provinceId,provinceName,type1Sum) values(@provinceId,@provinceName,@companySum) ) insert into #lastTable (provinceId,provinceName,type2Sum) values(@provinceId,@provinceName,@companySum) #lastTable (provinceId,provinceName,type3Sum) values(@provinceId,@provinceName,@companySum) () #lastTable #lastTable.provinceId() #lastTable.provinceId() #lastTable.provinceIdcurToNewTable curToNewTable curToNewTable ,,(select sum(type1Sum) from #lastTable) (select sum(type2Sum) from #lastTable) (select sum(type3Sum) from #lastTable) ,,curToFillRatio scroll type1Sum,type2Sum,type3Sum curToFillRatio () ((() () () () ((((4,1)) ((4,1)) ((4,1)) ((4,1)) #lastTable (, type2Ratio(, type3Ratio(, allTypeSum=@lineTypeAllSum, allTypeRatio( curToFillRatio curToFillRatio curToFillRatio deallocate curToFillRatio #lastTable ,, , , ) ( #lastTable allTypeSum )T #lastTable

我的一步步处理代码

------------------------------------------------------------------------------------------------

方法二:(得到的答案)

------------------------------------------------------------------------------------------------

这里的主要问题就是把有那个有多行省Id是一样的合并到一行中去,添加了列

神伤中......居然可以这么简单......

推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
author-avatar
ARUAN地盘_740
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有