虽然有从兄弟的帮助,我弄了两天,但这个sql我还是没法写出,再请兄弟帮助看看,先谢谢

wongwhb 卡莱 2010-10-23 03:20:18
需求:公司要求根据发料单查投料单的发料情况
具体如下:
表A: finterid fitemid ficmointerid foutqty foutbillno
001 001-1 09001001 20 test-1
001 001-2 09001001 50 test-1
002 001-1 09002001 20 test-2
003 001-2 09003001 50 test-3
表B:
finterid fitemid ficmointerid foutqty
001 001-1 09001001 80
001 001-2 09001001 100
001 001-3 09001001 200
001 001-4 09001001 150
002 001-1 09002001 80
002 001-2 09002001 100
003 001-1 09003001 80
003 001-2 09003001 100
003 001-3 09003001 40
两表合并查询当条件
foutbillno=test-1得出这样的结果:
finterid fitemid ficmointerid foutqty
001 001-1 09001001 20
001 001-2 09001001 50
001 001-3 09001001 200
001 001-4 09001001 150

当查询条件
foutbillno=test-2得出这样的结果:
finterid fitemid ficmointerid foutqty
002 001-1 09002001 20
002 001-2 09002001 100
当查询条件
foutbillno=test-2得出这样的结果:
finterid fitemid ficmointerid foutqty
001 001-1 09003001 80
001 001-2 09001001 50
001 001-3 09001001 40



请问应怎样写sql语句啊?请各位兄弟帮助,谢谢了


--> 测试数据:#ta
if object_id('tempdb.dbo.#ta') is not null drop table #ta
go
create table #ta([finterid] varchar(3),[fitemid] varchar(5),[ficmointerid] varchar(8),[foutqty] int,[fbillno] varchar(20))
insert #ta
select '001','001-1','09001001',20,'test-1' union all
select '001','001-2','09001001',50,'test-1' union all
select '003','001-1','09001001',20,'test-2' union all
select '004','001-2','09001001',50,'test-3'
go

--> 测试数据:#tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb([finterid] varchar(3),[fitemid] varchar(5),[ficmointerid] varchar(8),[foutqty] int)
insert #tb
select '001','001-1','09001001',80 union all
select '001','001-2','09001001',100 union all
select '001','001-3','09001001',200 union all
select '001','001-4','09001001',150 union all
select '002', '001-1','09002001',80 union all
select '002', '001-2','09002001', 100 union all
select '003', '001-1', '09003001', 80 union all
select '003', '001-2' , '09003001', 100 union all
select '003', '001-3' ,'09003001',40
go


...全文
109 点赞 收藏 20
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sport3884 2010-10-25
确实该楼主结账,呵呵
回复
SQLCenter 2010-10-23
[Quote=引用 18 楼 wongwhb 的回复:]

明白了,谢谢
[/Quote]

呵呵,不要给我分了,kevin87923 给你解释了半天。

结账吧。
回复
wongwhb 2010-10-23
明白了,谢谢
回复
kevin87923 2010-10-23
就看你是用存储过程还是不用,传参都差不多啊
回复
kevin87923 2010-10-23
[Quote=引用 6 楼 sqlcenter 的回复:]

目测/手写
SQL code
select b.finterid, b.fitemid, b.ficmointerid, isnull(a.foutqty,b.foutqty)foutqty
from #ta a right join #tb b on a.finterid=b.finterid and a.fitemid=b.fitemid
where exists (select 1 f……
[/Quote]

没用存储过程。
string sql=select b.finterid, b.fitemid, b.ficmointerid, isnull(a.foutqty,b.foutqty)foutqty
from #ta a right join #tb b on a.finterid=b.finterid and a.fitemid=b.fitemid
where exists (select 1 from #ta where finterid=b.finterid and fbillno='"+条件+"')
回复
wongwhb 2010-10-23
那就是用存诸过程了,谢谢
回复
wongwhb 2010-10-23
不是,是那样的,ficmointerid都是09002001,谢
回复
zsh0809 2010-10-23
后面的数据是对的,我拿得是顶楼的数据,还郁闷了....
DECLARE @condition AS VARCHAR(30)
SET @condition='TEST-3'

SELECT B.FINTERID,B.FITEMID,B.FICMOINTERID,ISNULL(A.FOUTQTY,B.FOUTQTY)FOUTQTY
FROM #TB B
LEFT JOIN #TA A
ON (A.FINTERID=B.FINTERID AND A.FITEMID=B.FITEMID)
WHERE EXISTS (SELECT NULL FROM #TA WHERE FINTERID=B.FINTERID AND FBILLNO=@condition)

FINTERID FITEMID FICMOINTERID FOUTQTY
-------- ------- ------------ -----------
003 001-1 09003001 80
003 001-2 09003001 50
003 001-3 09003001 40

(3 row(s) affected)
回复
wongwhb 2010-10-23
直接查询怎样传参数?写成存诸过程?我是菜鸟,谢谢了
回复
zsh0809 2010-10-23
foutbillno=test-2得出这样的结果:应该为下面的吧?

FINTERID FITEMID FICMOINTERID FOUTQTY
-------- ------- ------------ -----------
003 001-1 09003001 20
003 001-2 09003001 100
003 001-3 09003001 40

(3 row(s) affected)
回复
zsh0809 2010-10-23
你的数据好像还是有问题,test-2,test-3,看着不对啊
回复
kevin87923 2010-10-23
难到我理解错了, 他那没错啊, 只要你传个参数啊。
回复
kevin87923 2010-10-23
可以接结了。 6楼已写出
回复
wongwhb 2010-10-23
sqlcenter兄:
过滤的条件是动态的,通过过滤条件查询的,这样写死了啊,谢谢
回复
SQLCenter 2010-10-23
目测/手写
select b.finterid, b.fitemid, b.ficmointerid, isnull(a.foutqty,b.foutqty)foutqty
from #ta a right join #tb b on a.finterid=b.finterid and a.fitemid=b.fitemid
where exists (select 1 from #ta where finterid=b.finterid and foutbillno='test-1')
回复
wongwhb 2010-10-23
呼叫zsh0809兄,谢
回复
wongwhb 2010-10-23
重新再发一次:
需求:公司要求根据发料单查投料单的发料情况
具体如下:
表A: finterid fitemid ficmointerid foutqty foutbillno
001 001-1 09001001 20 test-1
001 001-2 09001001 50 test-1
002 001-1 09002001 20 test-2
003 001-2 09003001 50 test-3
表B:
finterid fitemid ficmointerid foutqty
001 001-1 09001001 80
001 001-2 09001001 100
001 001-3 09001001 200
001 001-4 09001001 150
002 001-1 09002001 80
002 001-2 09002001 100
003 001-1 09003001 80
003 001-2 09003001 100
003 001-3 09003001 40
两表合并查询当条件
foutbillno=test-1得出这样的结果:
finterid fitemid ficmointerid foutqty
001 001-1 09001001 20
001 001-2 09001001 50
001 001-3 09001001 200
001 001-4 09001001 150

当查询条件
foutbillno=test-2得出这样的结果:
finterid fitemid ficmointerid foutqty
002 001-1 09002001 20
002 001-2 09002001 100
当查询条件
foutbillno=test-3得出这样的结果:
finterid fitemid ficmointerid foutqty
001 001-1 09003001 80
001 001-2 09001001 50
001 001-3 09001001 40



请问应怎样写sql语句啊?请各位兄弟帮助,谢谢了


--> 测试数据:#ta
if object_id('tempdb.dbo.#ta') is not null drop table #ta
go
create table #ta([finterid] varchar(3),[fitemid] varchar(5),[ficmointerid] varchar(8),[foutqty] int,[fbillno] varchar(20))
insert #ta
select '001','001-1','09001001',20,'test-1' union all
select '001','001-2','09001001',50,'test-1' union all
select '003','001-1','09001001',20,'test-2' union all
select '004','001-2','09001001',50,'test-3'
go

--> 测试数据:#tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb([finterid] varchar(3),[fitemid] varchar(5),[ficmointerid] varchar(8),[foutqty] int)
insert #tb
select '001','001-1','09001001',80 union all
select '001','001-2','09001001',100 union all
select '001','001-3','09001001',200 union all
select '001','001-4','09001001',150 union all
select '002', '001-1','09002001',80 union all
select '002', '001-2','09002001', 100 union all
select '003', '001-1', '09003001', 80 union all
select '003', '001-2' , '09003001', 100 union all
select '003', '001-3' ,'09003001',40
go

谢谢了
回复
claro 2010-10-23
请zsh0809给你回答。
回复
wongwhb 2010-10-23
是test-3
不好意思
打错
回复
claro 2010-10-23
结果陈述有问题。
当查询条件
foutbillno=test-2得出这样的结果: 还是3?
finterid fitemid ficmointerid foutqty
001 001-1 09003001 80
001 001-2 09001001 50
001 001-3 09001001 40
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-23 03:20
社区公告
暂无公告