部门帐户表关联查询
帐号 部门
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
SELECT *,'xx' FROM 收到流水帐 SELECT *,(SELECT TOP 1 部门 FROM 部门帐户表 WHERE 账号=A.账号 ORDER BY NEWID()) FROM 收到流水帐 A
作者: zs621 发布时间: 2011-06-15
select *, (select top 1 部门 from 部门帐户表 where 帐号=a.帐号 order by newid())部门 from 收到流水帐 a
作者: qianjin036a 发布时间: 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
作者: yibey 发布时间: 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.帐号)
作者: fredrickhu 发布时间: 2011-06-15
作者: czyoooo 发布时间: 2011-06-15
如果不能明确,只显示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
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
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
select * , case when (select count(1) from 部门帐户表 where 帐号=a.帐号) >1 then 'xxx' else (select 部门 from 部门帐户表 where 帐号=a.帐号) end from 收到流水帐 a
是这个意思么
作者: yibey 发布时间: 2011-06-15