您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/3/10 1:34:10发布26次查看
做个东西,发现了些问题,又解决了,很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 #newtableopen 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 curtofillratiodeallocate curtofillratio#lasttable ,,,,)( #lasttable alltypesum )t#lasttable
我的一步步处理代码 
------------------------------------------------------------------------------------------------
方法二:(得到的答案)
------------------------------------------------------------------------------------------------
这里的主要问题就是把有那个有多行省id是一样的合并到一行中去,添加了列
神伤中......居然可以这么简单......
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product