最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-09 10:23:44
文档

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

数据库一步步处理行列转换:做个东西,发现了些问题,又解决了,很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这三个值,每个值一个含义),......其

做个东西,发现了些问题,又解决了,很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是一样的合并到一行中去,添加了列

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

文档

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

数据库一步步处理行列转换:做个东西,发现了些问题,又解决了,很Happy! 数据库有2个表: [省份表],2列(provinceId--省的id,provinceName--省名字), [公司表],好几列(companyId--公司Id,provinceId--公司所在省id,recruitType--这个招聘会类型(只有1,2,3这三个值,每
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top