部门帐户表
帐号 部门
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
帐号 部门
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
SELECT *,(SELECT TOP 1 部门 FROM 部门帐户表 WHERE 账号=A.账号 ORDER BY NEWID()) FROM 收到流水帐 A
(select top 1 部门 from 部门帐户表 where 帐号=a.帐号 order by newid())部门
from 收到流水帐 a
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
;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.帐号)
isnull((select top 1 部门 from 部门帐户表 where 帐号=a.帐号 order by newid()),'XX')部门
from 收到流水帐 a
如果流水帐流水帐帐号为A001,是可能关联到
A001 A2部
A001 A1部
A001 A3部
A001 A4部
四个部门中其中的一个.
如果碰到这种情况显示XXX.
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部
*/
2011-06-01 00:00:00.000 3000 A001 XX
2011-06-02 00:00:00.000 4000 A001 XX怎么处理呢?
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 部门帐户表,收到流水帐
case when (select count(1) from 部门帐户表 where 帐号=a.帐号) >1 then 'xxx'
else (select 部门 from 部门帐户表 where 帐号=a.帐号) end
from 收到流水帐 a是这个意思么
from
(
select a.日期,a.金额,a.帐号,count(*) as 部门次数,max(b.部门) as 部门
from 收到流水帐 a ,部门帐户表 b
where a.帐号=b.帐号
group by a.日期,a.金额,a.帐号
) tb