部门帐户表关联查询

部门帐户表
帐号 部门
A001 A2部  
A001 A1部  
A001 A3部
A001 A4部

收到流水帐
  日期 金额 帐号  
20110601 3000 A001  
20110602 4000 A001  


要求结果:
20110601 3000 A001 A1部
20110602 4000 A001 A2部
或者
要求结果:
20110601 3000 A001 XX
20110602 4000 A001 XX

因为无法区分A001是那里来的所以,每笔流水帐挂一个部门就可以,或者显示XX

作者: czyoooo   发布时间: 2011-06-15

SQL code
SELECT *,'xx' FROM 收到流水帐
SELECT *,(SELECT TOP 1 部门 FROM 部门帐户表 WHERE 账号=A.账号 ORDER BY NEWID()) FROM 收到流水帐 A

作者: zs621   发布时间: 2011-06-15

SQL code
select *,
(select top 1 部门 from 部门帐户表 where 帐号=a.帐号 order by newid())部门
from 收到流水帐 a
 

作者: qianjin036a   发布时间: 2011-06-15

SQL code



select a.*,isnull(b.部门,'XX') from 

(select row_number() over (partition by 帐号 order by 日期) as id , * from  收到流水帐) a
left join 
(select row_number() over (partition by 帐号 order by 部门) as id , * from  部门帐户表 ) b
on a.帐号 =b.帐号 and a.id = b.id






作者: yibey   发布时间: 2011-06-15

SQL code

;with f as
(select
  a.部门,b.*
from
  a,b
where
  a.帐号=b.帐号)

select * from f t where 部门=(select min(部门) from f where 日期=t.日期 金额=t. 金额  and 帐号=t.帐号)

作者: fredrickhu   发布时间: 2011-06-15

如果不能明确,只显示XX呢?

作者: czyoooo   发布时间: 2011-06-15

引用 5 楼 czyoooo 的回复:
如果不能明确,只显示XX呢?

SQL code
select *,
isnull((select top 1 部门 from 部门帐户表 where 帐号=a.帐号 order by newid()),'XX')部门
from 收到流水帐 a

作者: qianjin036a   发布时间: 2011-06-15

楼上理解错误.
如果流水帐流水帐帐号为A001,是可能关联到
A001 A2部  
A001 A1部  
A001 A3部
A001 A4部
四个部门中其中的一个.
如果碰到这种情况显示XXX.

作者: czyoooo   发布时间: 2011-06-15

SQL code

declare @部门帐户表 table (帐号 varchar(4),部门 varchar(4))
insert into @部门帐户表
select 'A001','A2部' union all
select 'A001','A1部' union all
select 'A001','A3部' union all
select 'A001','A4部'

declare @收到流水帐 table (日期 datetime,金额 int,帐号 varchar(4))
insert into @收到流水帐
select '20110601',3000,'A001' union all
select '20110602',4000,'A001'

select *,
(select top 1 部门 from @部门帐户表 where 帐号=a.帐号 order by newid())
from @收到流水帐 a

/*
日期                      金额          帐号   
----------------------- ----------- ---- ----
2011-06-01 00:00:00.000 3000        A001 A3部
2011-06-02 00:00:00.000 4000        A001 A4部
*/


作者: maco_wang   发布时间: 2011-06-15

如果出来要显示
2011-06-01 00:00:00.000 3000 A001 XX
2011-06-02 00:00:00.000 4000 A001 XX

怎么处理呢?

作者: czyoooo   发布时间: 2011-06-15

SQL code
create table 部门帐户表(帐号 varchar(10),部门 varchar(10))
insert into 部门帐户表
select 'A001','A2部' union all
select 'A001','A1部' union all
select 'A001','A3部' union all
select 'A001','A4部' union all
select 'A002','A02部'
create table 收到流水帐(日期 datetime,金额 int,帐号 varchar(10))
insert into 收到流水帐
select '20110601',3000,'A001' union all
select '20110602',4000,'A002'
go
select *,
case when (select count(*)c from 部门帐户表 where 帐号=a.帐号)=1 then
(select top 1 部门 from 部门帐户表 where 帐号=a.帐号)
else 'XXX' end
from 收到流水帐 a 
/*
日期                      金额          帐号         
----------------------- ----------- ---------- ----------
2011-06-01 00:00:00.000 3000        A001       XXX
2011-06-02 00:00:00.000 4000        A002       A02部

(2 行受影响)

*/
go
drop table 部门帐户表,收到流水帐

作者: qianjin036a   发布时间: 2011-06-15

SQL code


select * ,
case when (select count(1) from 部门帐户表  where 帐号=a.帐号) >1 then 'xxx' 
else (select 部门  from 部门帐户表   where 帐号=a.帐号) end
from 收到流水帐 a




是这个意思么

作者: yibey   发布时间: 2011-06-15