当前位置: 代码迷 >> Sql Server >> 关于count的有关问题
  详细解决方案

关于count的有关问题

热度:7   发布时间:2016-04-24 10:15:17.0
关于count的问题
名字  部门  上级
A       z     B
B       x

查询出

名字  部门  上级  上级人数
A        z         B      1
B       x                  0

------解决方案--------------------

with mytable as (
select 'A' id , 'z' dept ,'B' pid 
union all select 'B' , 'X',''
)
select x.id , x.dept,x.pid , case when y.id is null then 0 else 1 end as count
from mytable x left join mytable y on x.pid = y.id 

------解决方案--------------------
引用:

with mytable as (
select 'A' id , 'z' dept ,'B' pid 
union all select 'B' , 'X',''
)
select x.id , x.dept,x.pid , case when y.id is null then 0 else 1 end as count
from mytable x left join mytable y on x.pid = y.id 




id   dept pid  count
---- ---- ---- -----------
A    z    B    1
B    X         0

(2 行受影响)




------解决方案--------------------
借用楼上的

select x.名字 , x.部门,x.上级 , case when y.名字 is null then 0 else 1 end as 上级人数
from [table] x 
left join [table] y 
on x.上级 = y.名字 

------解决方案--------------------
引用:
Quote: 引用:

借用楼上的

select x.名字 , x.部门,x.上级 , case when y.名字 is null then 0 else 1 end as 上级人数
from [table] x 
left join [table] y 
on x.上级 = y.名字 


能按照我一楼的改一下吗?

这个结果不就是你一楼要的结果吗
------解决方案--------------------
应该符合你的要求吧:
create table pro
(名字 char(20),
部门 CHAR(20),
上级 char(10)
)

insert into pro 
values('A','Z','B'),
('B','x',''),
('A','Z','C'),
('C','x','B')

with ta
as(select 名字,部门,
SUM(case when isnull(上级,'')<>'' then 1 else 0 end) 上级人数 from pro
group by 名字,部门)
select a.*,b.上级人数 from pro a,ta b
where a.名字=b.名字 and a.部门=b.部门 
order by a.名字

截图如下:



------解决方案--------------------
create table 人员
(名字 char(20),
部门 CHAR(20),
上级 char(10)
)
 
insert into 人员 
values('A','Z','B'),
('B','x','C'),
('C','x','d')
truncate table 人员
go
alter function Get人员(@Dept_name nvarchar(20))
returns @Tab table(名字 CHAR(20) ,部门 CHAR(20),上级 CHAR(10))
begin
WITH 上级人员 AS(
-- 定位点成员
SELECT * FROM 人员
WHERE 名字 = @Dept_name
UNION ALL
-- 递归成员, 通过引用CTE自身与Dept基表JOIN实现递归
SELECT A.*
FROM 人员 A, 上级人员 B
WHERE a.名字 = b.上级
)
insert into @tab(名字,部门,上级) SELECT 名字,部门,上级 FROM 上级人员
return 
end
select a.名字,COUNT(B.名字)上级人数 from 人员 a outer apply dbo.Get人员(a.名字) b group by a.名字
go 
  相关解决方案