部门帐户表关联查询

czyoooo 2011-06-15 11:22:27
部门帐户表
帐号 部门
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

...全文
82 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yibey 2011-06-15
  • 打赏
  • 举报
回复


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



是这个意思么
-晴天 2011-06-15
  • 打赏
  • 举报
回复
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 部门帐户表,收到流水帐
czyoooo 2011-06-15
  • 打赏
  • 举报
回复
如果出来要显示
2011-06-01 00:00:00.000 3000 A001 XX
2011-06-02 00:00:00.000 4000 A001 XX

怎么处理呢?
叶子 2011-06-15
  • 打赏
  • 举报
回复

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部
*/

czyoooo 2011-06-15
  • 打赏
  • 举报
回复
楼上理解错误.
如果流水帐流水帐帐号为A001,是可能关联到
A001 A2部
A001 A1部
A001 A3部
A001 A4部
四个部门中其中的一个.
如果碰到这种情况显示XXX.

-晴天 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 czyoooo 的回复:]
如果不能明确,只显示XX呢?
[/Quote]
select *,
isnull((select top 1 部门 from 部门帐户表 where 帐号=a.帐号 order by newid()),'XX')部门
from 收到流水帐 a
czyoooo 2011-06-15
  • 打赏
  • 举报
回复
如果不能明确,只显示XX呢?
--小F-- 2011-06-15
  • 打赏
  • 举报
回复

;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.帐号)
yibey 2011-06-15
  • 打赏
  • 举报
回复



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





-晴天 2011-06-15
  • 打赏
  • 举报
回复
select *,
(select top 1 部门 from 部门帐户表 where 帐号=a.帐号 order by newid())部门
from 收到流水帐 a
zs621 2011-06-15
  • 打赏
  • 举报
回复
SELECT *,'xx' FROM 收到流水帐
SELECT *,(SELECT TOP 1 部门 FROM 部门帐户表 WHERE 账号=A.账号 ORDER BY NEWID()) FROM 收到流水帐 A
JavaEye 2011-06-15
  • 打赏
  • 举报
回复
这个题目还没怎么看懂啊。。
cd731107 2011-06-15
  • 打赏
  • 举报
回复
select 日期,金额,帐号,case when 部门次数>1 then 'XX' else 部门 end as 部门   
from
(
select a.日期,a.金额,a.帐号,count(*) as 部门次数,max(b.部门) as 部门
from 收到流水帐 a ,部门帐户表 b
where a.帐号=b.帐号
group by a.日期,a.金额,a.帐号
) tb

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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