日期:2014-05-18  浏览次数:20479 次

应该不会难倒前辈的查询语句
有一个表

单据号 行号 科目号  
01 1 A
01 2 B
02 1 A
02 2 C
02 3 D 
03 1 C
04 1 B
04 2 E

需要输出科目号有A或者B的单据(只要有一行有A或者B,单据的所有行就全部输出)
输出
单据号 行号 科目号  
01 1 A
01 2 B
02 1 A
02 2 C
02 3 D 
04 1 B
04 2 E

还请各位赐教!

------解决方案--------------------
SQL code
select *
from tb t
where exists(select 1 from tb where 单据号=t.单据号 and (科目号='A' or 科目号='B'))

------解决方案--------------------
SQL code

declare @T table (单据号 varchar(2),行号 int,科目号 varchar(1))
insert into @T
select '01',1,'A' union all
select '01',2,'B' union all
select '02',1,'A' union all
select '02',2,'C' union all
select '02',3,'D' union all
select '03',1,'C' union all
select '04',1,'B' union all
select '04',2,'E'

select distinct a.* from @t a left join @t b 
on a.单据号=b.单据号 where b.科目号='a' or b.科目号='b'
/*
单据号  行号          科目号
---- ----------- ----
01   1           A
01   2           B
02   1           A
02   2           C
02   3           D
04   1           B
04   2           E
*/

------解决方案--------------------
探讨
SQL code

declare @T table (单据号 varchar(2),行号 int,科目号 varchar(1))
insert into @T
select '01',1,'A' union all
select '01',2,'B' union all
select '02',1,'A' union all
select '02',2,'C' union all
……

------解决方案--------------------
SQL code


create table tb
(
    单据号    int,
    行号    int,
    科目号    nvarchar(1)
)
insert into tb values(01,1,'A')
insert into tb values(01,1,'B')
insert into tb values(02,1,'A')
insert into tb values(02,1,'C')
insert into tb values(02,1,'D')
insert into tb values(03,1,'C')
insert into tb values(04,1,'B')
insert into tb values(04,1,'E')


select * from tb 
where 单据号 in(select 单据号 from tb where 科目号 in('A','B') group by 单据号)
/*
单据号,行号,科目号
1,1,A
1,1,B
2,1,A
2,1,C
2,1,D
4,1,B
4,1,E

(7 行受影响)