-----------------------------
品名 车间领用出库数量
J40 3
ADOQuery2查询结果如下:
-----------------------------
品名 车间返回入库数量
J20 42
J40 1
我想把它们合并在一起,显示如下:
-----------------------------
品名 车间领用出库数量 车间返回入库数量 车间实际领用数量
J40 3 1 2
J20 0 42 -42
如何实现?
10 个解决方案
#1
left join
#2
你可以这样做
select A.品名 ,A.车间领用出库数量,B.车间返回入库数量,
(A.车间领用出库数量-B.车间返回入库数量) as 车间实际领用数量
from (生成ADOQuery1结果的SQL语句) A left join
(生成ADOQuery2结果的SQL语句) B on A.品名=B.品名
记住你的两个 ADOQuery结果集一定要用 Group by 品名进行过分组的才行
select A.品名 ,A.车间领用出库数量,B.车间返回入库数量,
(A.车间领用出库数量-B.车间返回入库数量) as 车间实际领用数量
from (生成ADOQuery1结果的SQL语句) A left join
(生成ADOQuery2结果的SQL语句) B on A.品名=B.品名
记住你的两个 ADOQuery结果集一定要用 Group by 品名进行过分组的才行
#3
劝楼主使用视图来实现比较好!要不然每次都要访问这些内容的时候,都要编译一下你的这个查询的语句!给你视图的语句:
SELECT dbo.[IN].品名, dbo.Out.数量 AS 车间领用出库数量,
dbo.[IN].数量 AS 车间返回入库数量, dbo.MyVal(dbo.Out.数量 - dbo.[IN].数量)
AS 车间实际领用数量
FROM dbo.[IN] FULL OUTER JOIN
dbo.Out ON dbo.[IN].品名 = dbo.Out.品名
其中dbo.MyVal是自定义的函数,如下:
CREATE FUNCTION MyVal (@Val Smallmoney)
RETURNS Smallmoney --用于我的类型判断!如果变量是null则返回的是0,如果变量非null则返回变量的值)
AS
BEGIN
declare @MyR smallmoney
if @val=null
set @MyR=0
else
set @MyR=@Val
return @MyR
END
SELECT dbo.[IN].品名, dbo.Out.数量 AS 车间领用出库数量,
dbo.[IN].数量 AS 车间返回入库数量, dbo.MyVal(dbo.Out.数量 - dbo.[IN].数量)
AS 车间实际领用数量
FROM dbo.[IN] FULL OUTER JOIN
dbo.Out ON dbo.[IN].品名 = dbo.Out.品名
其中dbo.MyVal是自定义的函数,如下:
CREATE FUNCTION MyVal (@Val Smallmoney)
RETURNS Smallmoney --用于我的类型判断!如果变量是null则返回的是0,如果变量非null则返回变量的值)
AS
BEGIN
declare @MyR smallmoney
if @val=null
set @MyR=0
else
set @MyR=@Val
return @MyR
END
#4
还有个问题就是要是IN表没有相关的记录的时候是null的!
看楼主的问题,应该是做一个出入库的系统,劝楼主要设计好你的数据库,感觉你的数据库设计不太合理。
出入库主要有2个业务流程:1出库的记录添加修改删除。2:入库的记录添加修改删除。因此,In表的品名是很多重复的,同样的道理,out表的品名也是很多重复的,因为反应了出库和入库是不同时间的出入情况,而并不是反应一件物品只出一次或者只入一次。因此,楼主要设计的这个使用情况,应该用到统计函数count,count一个表里面的不同物品的合计数量,得出车间的实际使用量。还有就是,不要使用品名来联合,最好使用物品的标识来联合。做一个物品表。
没见过你的实际设计,我猜到的也只有这些,你可以参考一下!说得不对请指点一下!
看楼主的问题,应该是做一个出入库的系统,劝楼主要设计好你的数据库,感觉你的数据库设计不太合理。
出入库主要有2个业务流程:1出库的记录添加修改删除。2:入库的记录添加修改删除。因此,In表的品名是很多重复的,同样的道理,out表的品名也是很多重复的,因为反应了出库和入库是不同时间的出入情况,而并不是反应一件物品只出一次或者只入一次。因此,楼主要设计的这个使用情况,应该用到统计函数count,count一个表里面的不同物品的合计数量,得出车间的实际使用量。还有就是,不要使用品名来联合,最好使用物品的标识来联合。做一个物品表。
没见过你的实际设计,我猜到的也只有这些,你可以参考一下!说得不对请指点一下!
#5
ADOQuery1和ADOQuery2中的品名其实是库存表中的品名,我上面所显示的只是查询后的一部分,入库表和出库表和库存表是通过库存表中的编号关联的.
ADOQuery1和ADOQuery2已经查询出来了,只要能把它们关联在一起显示出来就满足我的要求了,但是还要注意有出库没有入库或有入库没有出库的情况.
#6
回复人: lyBingYu(冰雨) ( ) 信誉:100
你的我试了,如果同一品名的即有入库也有出库可以,但是如果有出库没有入库或有入库没有出库的就不行了.
你的我试了,如果同一品名的即有入库也有出库可以,但是如果有出库没有入库或有入库没有出库的就不行了.
#7
select A.品名 ,B.品名,A.车间领用出库数量,B.车间返回入库数量,
(A.车间领用出库数量-B.车间返回入库数量) as 车间实际领用数量
from (生成ADOQuery1结果的SQL语句) A full outer join
(生成ADOQuery2结果的SQL语句) B on A.品名=B.品名
我试过,如果这样的话就会有两个品名,能不能去掉一个?
(A.车间领用出库数量-B.车间返回入库数量) as 车间实际领用数量
from (生成ADOQuery1结果的SQL语句) A full outer join
(生成ADOQuery2结果的SQL语句) B on A.品名=B.品名
我试过,如果这样的话就会有两个品名,能不能去掉一个?
#8
up
#9
select table1.1,table1.2,b.1,b.2 from table1 left join table2 b on b.1=table1.1
#10
回复人: chwdong(chwdong) ( ) 信誉:100
能不能具体一点,不太明白.table1.1,table1.2是什么
能不能具体一点,不太明白.table1.1,table1.2是什么
#1
left join
#2
你可以这样做
select A.品名 ,A.车间领用出库数量,B.车间返回入库数量,
(A.车间领用出库数量-B.车间返回入库数量) as 车间实际领用数量
from (生成ADOQuery1结果的SQL语句) A left join
(生成ADOQuery2结果的SQL语句) B on A.品名=B.品名
记住你的两个 ADOQuery结果集一定要用 Group by 品名进行过分组的才行
select A.品名 ,A.车间领用出库数量,B.车间返回入库数量,
(A.车间领用出库数量-B.车间返回入库数量) as 车间实际领用数量
from (生成ADOQuery1结果的SQL语句) A left join
(生成ADOQuery2结果的SQL语句) B on A.品名=B.品名
记住你的两个 ADOQuery结果集一定要用 Group by 品名进行过分组的才行
#3
劝楼主使用视图来实现比较好!要不然每次都要访问这些内容的时候,都要编译一下你的这个查询的语句!给你视图的语句:
SELECT dbo.[IN].品名, dbo.Out.数量 AS 车间领用出库数量,
dbo.[IN].数量 AS 车间返回入库数量, dbo.MyVal(dbo.Out.数量 - dbo.[IN].数量)
AS 车间实际领用数量
FROM dbo.[IN] FULL OUTER JOIN
dbo.Out ON dbo.[IN].品名 = dbo.Out.品名
其中dbo.MyVal是自定义的函数,如下:
CREATE FUNCTION MyVal (@Val Smallmoney)
RETURNS Smallmoney --用于我的类型判断!如果变量是null则返回的是0,如果变量非null则返回变量的值)
AS
BEGIN
declare @MyR smallmoney
if @val=null
set @MyR=0
else
set @MyR=@Val
return @MyR
END
SELECT dbo.[IN].品名, dbo.Out.数量 AS 车间领用出库数量,
dbo.[IN].数量 AS 车间返回入库数量, dbo.MyVal(dbo.Out.数量 - dbo.[IN].数量)
AS 车间实际领用数量
FROM dbo.[IN] FULL OUTER JOIN
dbo.Out ON dbo.[IN].品名 = dbo.Out.品名
其中dbo.MyVal是自定义的函数,如下:
CREATE FUNCTION MyVal (@Val Smallmoney)
RETURNS Smallmoney --用于我的类型判断!如果变量是null则返回的是0,如果变量非null则返回变量的值)
AS
BEGIN
declare @MyR smallmoney
if @val=null
set @MyR=0
else
set @MyR=@Val
return @MyR
END
#4
还有个问题就是要是IN表没有相关的记录的时候是null的!
看楼主的问题,应该是做一个出入库的系统,劝楼主要设计好你的数据库,感觉你的数据库设计不太合理。
出入库主要有2个业务流程:1出库的记录添加修改删除。2:入库的记录添加修改删除。因此,In表的品名是很多重复的,同样的道理,out表的品名也是很多重复的,因为反应了出库和入库是不同时间的出入情况,而并不是反应一件物品只出一次或者只入一次。因此,楼主要设计的这个使用情况,应该用到统计函数count,count一个表里面的不同物品的合计数量,得出车间的实际使用量。还有就是,不要使用品名来联合,最好使用物品的标识来联合。做一个物品表。
没见过你的实际设计,我猜到的也只有这些,你可以参考一下!说得不对请指点一下!
看楼主的问题,应该是做一个出入库的系统,劝楼主要设计好你的数据库,感觉你的数据库设计不太合理。
出入库主要有2个业务流程:1出库的记录添加修改删除。2:入库的记录添加修改删除。因此,In表的品名是很多重复的,同样的道理,out表的品名也是很多重复的,因为反应了出库和入库是不同时间的出入情况,而并不是反应一件物品只出一次或者只入一次。因此,楼主要设计的这个使用情况,应该用到统计函数count,count一个表里面的不同物品的合计数量,得出车间的实际使用量。还有就是,不要使用品名来联合,最好使用物品的标识来联合。做一个物品表。
没见过你的实际设计,我猜到的也只有这些,你可以参考一下!说得不对请指点一下!
#5
ADOQuery1和ADOQuery2中的品名其实是库存表中的品名,我上面所显示的只是查询后的一部分,入库表和出库表和库存表是通过库存表中的编号关联的.
ADOQuery1和ADOQuery2已经查询出来了,只要能把它们关联在一起显示出来就满足我的要求了,但是还要注意有出库没有入库或有入库没有出库的情况.
#6
回复人: lyBingYu(冰雨) ( ) 信誉:100
你的我试了,如果同一品名的即有入库也有出库可以,但是如果有出库没有入库或有入库没有出库的就不行了.
你的我试了,如果同一品名的即有入库也有出库可以,但是如果有出库没有入库或有入库没有出库的就不行了.
#7
select A.品名 ,B.品名,A.车间领用出库数量,B.车间返回入库数量,
(A.车间领用出库数量-B.车间返回入库数量) as 车间实际领用数量
from (生成ADOQuery1结果的SQL语句) A full outer join
(生成ADOQuery2结果的SQL语句) B on A.品名=B.品名
我试过,如果这样的话就会有两个品名,能不能去掉一个?
(A.车间领用出库数量-B.车间返回入库数量) as 车间实际领用数量
from (生成ADOQuery1结果的SQL语句) A full outer join
(生成ADOQuery2结果的SQL语句) B on A.品名=B.品名
我试过,如果这样的话就会有两个品名,能不能去掉一个?
#8
up
#9
select table1.1,table1.2,b.1,b.2 from table1 left join table2 b on b.1=table1.1
#10
回复人: chwdong(chwdong) ( ) 信誉:100
能不能具体一点,不太明白.table1.1,table1.2是什么
能不能具体一点,不太明白.table1.1,table1.2是什么