多表关联查询,主要在T1表的日期在T2、Tab

销售表T1
品名 出库数量  单价    金额     日期 
香蕉    10       30      300   2015-06-01 
香蕉     5       35      175   2015-06-13

期初成本表T2
品名 成本单价 数量
香蕉     5     100

加工表T3
品名 单价 数量    加工日期
香蕉   6    80    2015-05-10
香蕉   5    40    2015-05-20
香蕉   8    100  2015-06-05

如何得到下面结果:此结果由T1加一截至成本单价字段得来,其截止成本单价计算方法为:(表T2品名金额)+(表T3小于等于T1日期金额)/(对应T2数量+T3小于等于T1日期数量) 后四舍五入单价,即T2表对应品名金额加T1表小于等于日期之前的T3表品名金额之和除以两表数量计算出的对应平均单价,可以参看下面列式

品名 出库数量 单价   金额      日期         截至成本单价
香蕉    10      30    300  2015-06-01    5.36 = (5*100)+(6*80)+(5*40) / (100+80+40) 
香蕉     5       35   175  2015-06-13     6.19 = (5*100)+(6*80)+(5*40)+(8*100) / (100+80+40+100)

答案1

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

sql2005

;with jgcb as

(select *,cast(‘1900-01-01‘ as datetime) 加工日期 from T2

UNION

select from T3)

select a.*,

(select sum(成本单价*数量)/sum(数量) from jgcb b

where a.品名=b.品名 and a.日期>=b.加工日期

) 截至成本单价

  from T1 a

sql2000

SELECT a.*,
          (SELECT SUM(成本单价 * 数量) / SUM(数量)
         FROM (SELECT *, cast(‘1900-01-01‘ AS datetime) 加工日期
                 FROM T2
                 UNION
                 SELECT *
                 FROM T3) b
         WHERE a.品名 = b.品名 AND a.日期 >= b.加工日期) AS 截至成本单价
FROM T1 a

答案2

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

drop table #Temp_1
go
drop table #Temp_2
go
drop table #Temp_3
go

create table #Temp_1(
Name varchar(200),
OutQTY numeric(18,4),
Price numeric(18,4),
moneys  numeric(18,4),
Dates  datetime
)
create table #Temp_2
(
Name varchar(200),
Price numeric(18,4),
CostQTY numeric(18,4)
)
Create table #Temp_3
(
Name varchar(200),
ProcessPrice numeric(18,4),
ProcessQTY numeric(18,4),
ProcessDate datetime
)

insert into #Temp_1
select ‘香蕉‘,10,30,300,‘2015-06-01‘union all
select ‘香蕉‘,5,35,175,‘2015-06-13‘
insert into #Temp_2
select ‘香蕉‘,5,100
insert into #Temp_3
select ‘香蕉‘,6,80,‘2015-05-10‘ union all
select ‘香蕉‘,5,40,‘2015-05-20‘ union all
select ‘香蕉‘,8,100,‘2015-06-05‘

select
distinct
t1.Name as 品名,
t1.OutQTY as 出库数量,
t1.Price as 单价,
t1.moneys as 金额,
t1.Dates as 日期,
t2.CostQTY*t2.Price as 期初成本金额,
c.P as 加工金额,
((t2.CostQTY*t2.Price)+c.P)/d.SumProcessQTY as 截至成本单价,
d.SumProcessQTY,
cast(((t2.CostQTY*t2.Price)+c.P)/(d.SumProcessQTY) as numeric(18,4))as UnCost
from #Temp_1 t1
left join  #Temp_2 t2  on t1.Name=t2.Name
left join (select distinct
cet.Dates,
cet.Name,
sum(t3.ProcessPrice* t3.ProcessQTY)as P
from  #Temp_1 cet
left join #Temp_3 t3 on cet.Name=t3.Name and cet.Dates>=t3.ProcessDate
group by cet.Dates,cet.Name
)c  on c.Name=t1.Name and c.Dates=t1.Dates

left join (select
t1.Name,t1.Dates,
sum(distinct t3.ProcessQTY)  as SumProcessQTY
from #Temp_1 t1
left join #Temp_3 t3 on t1.Name=t3.Name and t1.Dates>=t3.ProcessDate
group by t1.Name,t1.Dates)d  on d.Name=t1.Name

时间: 2024-10-12 19:26:22

多表关联查询,主要在T1表的日期在T2、Tab的相关文章

不使用left-join等多表关联查询,只用单表查询和Java程序,简便实现“多表查询”效果

上次我们提到,不使用left-loin关联查询,可能是为了提高效率或者配置缓存,也可以简化一下sql语句的编写.只写单表查询,sql真得太简单了.问题是,查询多个表的数据还是非常需要的. 因此,存在这么一个强烈的需求:查询2个集合,怎么合并2个集合中的数据为1个集合,且数据关联要正确.在实践中,我提炼了如下流程和工具方法: 流程  先查询第1个集合,根据第1个集合的结果,查询第2个集合,合并2个集合 public PageVo listPage(PageVo form) { List<Map<

oracle02--多表关联查询

1. 多表(关联)查询 多表查询也称之为关联查询.多表关联查询等,主要是指通过多个表的关联来获取数据的一种方式. 1.1. 多表映射关系 一对多:A表的一行数据,对应B表中的多条.如:一个部门可以对应多个员工. 多对一:B表中的多条对应A表的一行数据.如:多个员工对应一个部门. 多对多:学生和选修课表----学生和课程对应表. 一对一:人员基本信息和人员信息扩展表. 1.2. 笛卡尔集 笛卡尔集对于我们数据库的数据查询结果的影响: 1. 数据冗余.---笛卡尔集并不是我们所需要的数据. 2. 效

Hibernate-多表关联查询结果的处理方法

Hibernate多表查询结果处理 (2014-07-06 20:45:40) 转载▼ 标签: hibernate 多表查询 结果集处理 分类: Java 如果我们在Hibernate中需要查询多个表的不同字段,那么如何来获取Hibernate多表查询的结果呢?有两种方式: 1. 对各个字段分别转化成对应类型,如下: Java代码: Query q = session.createQuery(" select members, classInfo.className " + "

RDIFramework.NET 中多表关联查询分页实例

RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为指导思想,作为异质系统整合与互操作性.分布式应用提供了可行的解决方案. 分页非常的常见,基本任何项目都会涉及到分页,这没什么好谈的,大多数我们分页对单表的分页比较多,对多表的分页我们可以通过视图来实现,当然还有其他的方式,在这儿,我以一个实例展示下使用我们的RDIFramework.NET来实现多表

MySQL多表关联查询与存储过程

1.多表关联查询 --  **************关联查询(多表查询)**************** -- 需求:查询员工及其所在部门(显示员工姓名,部门名称) -- 1.1 交叉连接查询(不推荐.产生笛卡尔乘积现象:4 * 4=16,有些是重复记录) SELECT empName,deptName FROM employee,dept; -- 需求:查询员工及其所在部门(显示员工姓名,部门名称) -- 多表查询规则:1)确定查询哪些表   2)确定查询哪些字段   3)表与表之间连接条件

图解SQL多表关联查询

图解SQL多表关联查询 网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习  内连接 左连接 右连接 全外连接

Yii2中多表关联查询(join、joinwith) with是不执行sql的

Yii2中多表关联查询(join.joinwith) 我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name customer_id book_id) 图书表 (id book_name author_id) 作者表 (id author_name) 模型定义 下面是这4个个模型的定义,只写出其中的关联 Customer class Customer extends \

mark---[mysql多表关联查询的优化方法]

对于一个网站来说,数据库的结构至关重要.即要利于存储(入库不阻塞),又要利于查询(查询不锁表).网站数据库优化经验是一个积累的过程.下面就对多表关联查询的优化方法,举例说明. 现在社区分享类网站很火,就拿方维购物分享网站举例说明吧.也是对二次开发方维购物分享网站的一点总结,高手可以飞过. 购物分享的关键表有:分享表.图片表.文件表.评论表.标签表.分类表等. 围绕分享的表就么多,哇,那也不少啊.当我们查看一个图片的详细信息时,就要显示以上表里的信息.显示图片所属的分类.给图片打的标签.图片的评论

SQL两表关联查询&批量修改字段值

SQL关联查询&修改字段,正确范例如下: --批量修改报告单位名称&更新时间 --tt和tp两表关联查询,将符合条件的tt表中的principal字段更新到tp表的ruperson字段 merge into nhis34.t_publicplaces tp using standard.t_organization tt on (tt.orgcode = tp.r_orgcode and tp.create_time > '2015-05-07 00:00:00') when mat