首页 新闻 赞助 找找看

两个关联的表 查询出符合条件的字段的记录数

0
悬赏园豆:60 [已解决问题] 解决于 2013-02-22 13:42

有两个相关联的的表,

表1字段 uid(机构ID) uname(机构名字), 

表2字段 wid(人员ID) wname(人员名字) uid(机构ID) ,

其中uid是有上下级别的,查询条件uid过滤,如果查询条件uid是01的则显示like '01%'下各个机构的名字及人数,例如:

表1:

uid         uname

01           机构1

0102       机构2

010202   机构2-1

表2:

wid    wname    uid

1           a         01

2           b         01

3           c         0102

4           d         010202

如果查询条件传的是uid为01

则查询结果是

uname      count

机构1          2 

机构2          2

如果查询条件传的uid为0102

则查询结果是

uname    count

机构2        1

机构2-1     1

请问怎么写SQL语句才能实现???

晨之风的主页 晨之风 | 菜鸟二级 | 园豆:373
提问于:2013-02-22 10:14
< >
分享
最佳答案
0
declare @id nvarchar(50);
set @id='01';
Select U.Uid, U.uname, 
Count = 
case 
when LEN(uid)=LEN(@id) THEN (Select Count(0) From wkey W Where W.uid = U.uid)
when LEN(uid)>LEN(@id) THEN (Select Count(0) From wkey W Where W.uid like U.uid+'%')
end
From ukey U
where LEN(U.uid)>=LEN(@ID) and LEN(U.uid)<=LEN(@ID)+2

 

收获园豆:60
Yu | 专家六级 |园豆:12980 | 2013-02-22 11:19

这个在oracle里怎么写啊?

晨之风 | 园豆:373 (菜鸟二级) | 2013-02-22 12:02

@晨之风: 我没用过oracle 你查查各自对应的语法 差不多的

Yu | 园豆:12980 (专家六级) | 2013-02-22 12:38
其他回答(2)
0

Select U.Uid, U.uname,

  (Select Count(0) From 表2 W Where W.uid = U.uid) As count

From 表1 U

Where U.uid Like '01%'

Order By U.uid

SQL凭手写的可能有问题,但就是这么个意思,你测试一下。

nZAI | 园豆:10 (初学一级) | 2013-02-22 10:29

谢谢,但不是要的结果,查询条件uid如果是01 的时候,我要的是只查询出来 uid是01  和0102的,而不要查询出来010202的,如果查询条件uid是0102  就显示010202的及01020202的都可以显示出来了,有什么什么办法能解决吗?谢谢。

支持(0) 反对(0) 晨之风 | 园豆:373 (菜鸟二级) | 2013-02-22 10:47
0

declare @uid varchar(50)

set @uid='01'

Select

uname,

count=(Select Count(*) From 表2 Where uid = 表1.uid)

From 表1

Where uid Like @uid+'%' and len(uid)<=len(@uid)+2

Rich.T | 园豆:3440 (老鸟四级) | 2013-02-22 11:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册