如何将SELECT 语句中的字段值传递到另一个SELECT语句中计算?请高手帮忙!

randwind 2011-05-10 08:38:59
我在VB.NET下使用OleDb操作access数据库.数据库中有3张表 IN_TABLE,OUT_TABLE,SPEC_TABLE,结构如下
IN_TABLE:

索引 单价 数量 规格
1 10 10 A
2 20 5 B
3 10 5 C
4 5 10 A
5 15 10 B

OUT_TABLE:

索引 数量 规格
1 5 A
2 5 B
3 5 C

SPEC_TABLE:

索引 规格
1 A
2 B
3 C


现在要求输出如下的数据

索引 数量 规格 单价
1 5 A 7.5
2 5 B 16.67
3 5 C 5

上面的输出表其实就是OUT_TABLE表后面加上一列 单价, 单价的数据从 IN_TABLE 表中计算得到,即将相同规格的数量和单价相乘然后相加再除以总数量. (10*10+5*10)/(10+10)=7.5

请问如何使用SQL语句实现啊.
我用下面的SQL无法实现,请高手帮忙修正下


Dim sqlStrDanjia As String = "select SumJinge/SumShuliang from (select SUM(IN_TABLE.单价*IN_TABLE.数量) AS SumJinge, SUM(IN_TABLE.数量) AS SumShuliang from IN_TABLE,OUT_TABLE WHERE IN_TABLE.规格=OUT_TABLE.规格)"


Dim sqlStr As String = "select OUT_TABLE.索引, OUT_TABLE.规格, (" & sqlStrDnajia & ") as 单价 FROM OUT_TABLE ,SPEC_TABLE WHERE OUT_TABLE.规格=SPEC_TABLE.规格 ORDER BY OUT_TABLE.索引 ASC"

DataAdapter.SelectCommand = New OleDbCommand(sqlStr, dbConnection)

我得到的单价是个固定的值,不对应.谢谢

...全文
67 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tosp2012 2011-05-11
  • 打赏
  • 举报
回复

select a.索引,a.数量,a.规格,b.单价 from OUT_TABLE a,(select 规格,avg(单价) as 单价 from IN_TABLE group by 规格 ) b WHERE a.规格=b.规格
lhblxm 2011-05-10
  • 打赏
  • 举报
回复
你这个就是用加权平均法计算成本,由于IN_TABLE中同一规格有多条记录,在定SQL语句时要加上GROUP BY

Dim sqlStrDanjia As String = "select SumJinge/SumShuliang from (select SUM(IN_TABLE.单价*IN_TABLE.数量) AS SumJinge, SUM(IN_TABLE.数量) AS SumShuliang from IN_TABLE,OUT_TABLE WHERE IN_TABLE.规格=OUT_TABLE.规格)"

改成

Dim sqlStrDanjia As String = "select 规格
,SumJinge/SumShuliang
from
(select 规格,
SUM(IN_TABLE.单价*IN_TABLE.数量) AS SumJinge,
SUM(IN_TABLE.数量) AS SumShuliang
from IN_TABLE
GROUP BY 规格 ) A"


其实是一个语句就可以了,由于很久没用ACCESS,给一段T-SQL


select B.*, A.SumJinge/A.SumShuliang AS 单价 FROM(
select
规格
,SUM(单价*数量) AS SumJinge
, SUM(数量) AS SumShuliang
from IN_TABLE
GROUP BY 规格) A JOIN OUT_TABLE B ON A.规格=B.规格
ORDER BY B.索引








16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧