有两个相关联的的表,
表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语句才能实现???
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
这个在oracle里怎么写啊?
@晨之风: 我没用过oracle 你查查各自对应的语法 差不多的
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凭手写的可能有问题,但就是这么个意思,你测试一下。
谢谢,但不是要的结果,查询条件uid如果是01 的时候,我要的是只查询出来 uid是01 和0102的,而不要查询出来010202的,如果查询条件uid是0102 就显示010202的及01020202的都可以显示出来了,有什么什么办法能解决吗?谢谢。
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