首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

汇总的SQL

2012-07-25 
求一个汇总的SQLid(int), userName(nvchar), parentId(int),status(bit)1, user1, 1, 12, user2, 1, 13, u

求一个汇总的SQL
id(int), userName(nvchar), parentId(int),status(bit)
1, user1, 1, 1
2, user2, 1, 1
3, user3, 2, 0
4, user4, 3, 0
5, user5, 1, 1
6, user6, 5, 0

输出

id, userName, count(case status ='true' ) t, count(case status ='false' ) f
2, user2, 2, 2
5, user5, 1, 1

把 user1(包含user1)的后代按照 status分类求个数,并按照user1的儿子 分组。
表达力不行,不晓得清楚不^_^

求此输出的SQL。SQL不太熟悉,折腾了很久没有思路...,求大虾们给个SQL吧,在此先谢了。

[解决办法]

SQL code
declare @t table (ID varchar(1),userName varchar(5),parentId varchar(1),status bit)insert into @tselect 1,'user1',0,1 union allselect 2,'user2',1,1 union allselect 3,'user3',2,0 union allselect 4,'user4',3,0 union allselect 5,'user5',1,1 union allselect 6,'user6',5,0Declare @p varchar(6) set @p='user1'select id,userName from @T where parentId=(select id from @T where userName=@p)/*id   userName---- --------2    user25    user5*/--不知道后面的 2 2 1 1 是怎么统计出来的...--深度排序显示处理DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))DECLARE @Level intSET @Level=0INSERT @t_Level SELECT ID,@Level,IDFROM @tWHERE parentId =0WHILE @@ROWCOUNT>0BEGIN    SET @Level=@Level+1    INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID    FROM @t a,@t_Level b    WHERE a.parentId=b.ID        AND b.Level=@Level-1END--显示结果SELECT left(SPACE(b.Level*2)+'|--'+a.userName,16) as userName,a.statusFROM @t a,@t_Level b WHERE a.ID=b.ID ORDER BY b.Sort/*userName                         status-------------------------------- ------|--user1                         1  |--user2                       1    |--user3                     0      |--user4                   0  |--user5                       1    |--user6                     0*/--你给出的结果:user2后面是2真2假 --user5后面是1真1假--一共是6个数据,但是user1的真为什么算到2里面? 

热点排行