sql实现从两个表获取字段组成表数据再插入到函数表中

实现此效果说起来比较难以说明,我这里还是先将实现的效果已图的形式展示一下吧。

这是两个表的设计。我想实现的效果举个例子,以查询secretaryCharge为例:

点击“市级”,我将查询到市级一下所有“区级”的secretaryCharge数目,并通过organizations中的fullName来作为名字,查到的统计数目作为值。得到的效果便是如下图所示:

具体实现sql语句就是用到join on,sql语句具体如下:

insert @result(fullName,paramer)
					(
						select fullName,villageCharge
						from
							(
								select fullName,orgID from organizations where [email protected]
							) as orgInfo
						join
							(
								select DJCharge.parentOrg as parent ,sum(villageCharge) as villageCharge
								from DJCharge,organizations
								where [email protected] and DJCharge.orgID=organizations.orgID
								and DJCharge.parentOrg in(select distinct orgID from organizations where [email protected])group by DJCharge.parentOrg
							) as DJChargeInfo
						on orgInfo.orgID=DJChargeInfo.parent
				   )

这里我省略了定义、声明等过程,此段代码是begin-end块中的。用了groupby,不用的话则会统计总数,而不能将子查询分开统计。

如果需要统计一个表中的多个字段统计数,join-on还可以继续使用,代码例子如下所示:

insert @result (regionFullName,countmale,countfemale)
					(
				        select fullName,countmale,countfemale
				        from

							(
								select fullName,orgID from organizations where [email protected]
							) as orgInfo
							full join
							(

									select count(*) as countmale,SUBSTRING(parentOrg,2,6) AS parent from partyMembers where sex='男'
									and substring(parentOrg ,2,6)in
									( select substring(orgID,2,6) AS validOrgID From organizations where [email protected])
									 group by substring(parentOrg,2,6)
							)as Male
							on substring(orgInfo.orgID,2,6)=Male.parent
							full join
							(
									select count(*) as countfemale,substring(parentOrg,2,6)AS parent from partyMembers where sex='女'
									and substring(parentOrg ,2,6)in
									( select substring(orgID,2,6) AS validOrgID From organizations where [email protected])
									 group by substring(parentOrg,2,6)
							)as Female
						on substring(orgInfo.orgID,2,6)=Female.parent 

					)

这里我用了full join全连接,目的是在显示时只要组成的表中有一个字段有值,这一行都得到。查询效果如下:

如果不使用全连接可能会产生多余两行结果。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-04 17:50:12

sql实现从两个表获取字段组成表数据再插入到函数表中的相关文章

mysql高效获取两张表共同字段的交集数据

问题: 例如下面两站表A,B.A表和B表分别有5-10w数据.A表结构如下:id bid name title publisher extraB表结构如下id bid name title publisher A出版社也为很多人出版了书籍,B出版社也为很多人出版了书籍,有sql语句找出这两个出版社为那些人 共同出版书籍,用innerjoin太慢,有没有什么更好的办法? 解答一: 由于不知道你表的索引情况,至于用join还是in和exists不太好说,理论上讲,exists最快.in次之.join

Oracle中查看所有表和字段以及表注释.字段注释

获取表: select table_name from user_tables; //当前用户拥有的表 select table_name from all_tables; //所有用户的表 select table_name from dba_tables; //包括系统表 select table_name from dba_tables where owner='用户名' user_tables: table_name,tablespace_name,last_analyzed等 dba_

两种方式 获取数据库某个表中所有的数据数量条数

public int getAllEmps(){        //第一种方式 纯JDBC方式//        Connection conn=null;//        PreparedStatement ps=null;//        ResultSet rs=null;//        try {//            conn=C3Pool.getConnection();//            String sql="select count(*) from emp&

elasticsearch获取字段missing的数据

用head查询: demo如下 http://localhost:9200/sj_0505/lw_point_location/ _search post { "query": { "bool": { "must_not": { "exists": { "field": "wifi_point_unid" } } } } } 原文地址:https://www.cnblogs.com/ch

设置mysql数据表列自动递增以及数据行插入操作

创建mysql数据表,设置id列递增.主键create table running_log ( id int primary key auto_increment, routename varchar(255), log varchar(255), time datetime ); 往有递增数据列的数据表插入新的数据行 1.INSERT INTO `running_log` (`id`, `routename`, `log`, `time`) VALUES ('null', 'yunnan-10

用倍增方式查询本表数据再插入到本表,用作测试数据

INSERT INTO `user`( `name`, `password`, `sex`, `age`, `email`, `mypage`, `salary`) SELECT `name`, `password`, `sex`, `age`, `email`, `mypage`, `salary` FROM `user` 注意,不要把主键id放进去

mysql中最常用到的数据类型,约束条件,以及表,字段,行的crud操作指令,function和precedure之间的区别,索引,安全,事务

数据库总结 传统记录数据的缺点:不易保存,备份困难,查找不便 数据库:存储数据的仓库,描述一个事务的基本信息 优点:1.持久化存储 2.读写速度极高 3.保证数据的有效性 RDBMS relational database management system 军火当前主要使用两种类型的数据库:1.关系型数据库,2非关系型数据库 关系型数据库的主要产品: oracle:主要大型项目中使用,银行,电信等项目 mysql:web时代使用最广泛的关系型数据库 ms sql server: 微软的项目中使

所需的防伪表单字段“__RequestVerificationToken”不存在

错误提示为:所需的防伪表单字段"__RequestVerificationToken"不存在. <%:Html.AntiForgeryToken()%> 在mvc4中的写法 @Html.AntiForgeryToken(); 当在view中没有写而action上有写时也报上述错误. 当请求为get时也报上述错误. 只是在view中有写而action上没有写  [ValidateAntiForgeryToken]时不报错误 @Html.Raw(value)//输出带有html

mysql搜索多表多字段模糊查询

select parttime_job_business_assessments.*, u.nick_name, u.mobile, pj.name as job_name, b.name as business_name from `parttime_job_business_assessments` left join `users` as `u` on `u`.`id` = `parttime_job_business_assessments`.`user_id` left join `p