TAB1
username(用户名)  popedom(权限,第1位表删除、2位表添加、3位表修改、4位表审批、5位管理)
gt5070073         11111,10111,10111,10110 (注意:这个“,”个数不定)
....TAB2
itemname(项目名称) popedom_num(权限对应的第N个串)
新闻               1(这个对应的就是上面的"11111")
项目        2(这个对应的就是上面的"10111")
日志               3(这个对应的就是上面的"10111")
用户管理           4(这个对应的就是上面的"10110")
文件管理           5(这个上面没有就默认为"00000")
我现在就是要查“gt5070073”这个用户的TAB2表对应权限,要生成如下格式:
itemname(项目名称)删除 添加 修改 审批 管理
新闻                1   1  1   1  1
项目         1   0  1   1  1
日志                1   0  1   1  1
用户管理            1   0  1   1  0
文件管理            0   0  0   0  0
不知我说清楚了没有,大家帮帮我,看这个SQL乍样写

解决方案 »

  1.   


    create table TAB1 (
    username varchar(20),
    itemname varchar(20),
    del bit default 0,
    [add] bit default 0,
    [modify] bit default 0,
    checkup bit default 0,
    manage bit default 0
    )insert into TAB1 values ('gt5070073', '新闻', 1,1,1,1,1)
    insert into TAB1 values ('gt5070073', '项目', 1,0,1,1,1)
    insert into TAB1 values ('gt5070073', '日志', 1,0,1,1,1)
    insert into TAB1 values ('gt5070073', '用户管理', 1,0,1,1,0)
    insert into TAB1 values ('gt5070073', '文件管理', 0,0,0,0,0)
    select * from TAB1 where username='gt5070073'
      

  2.   

    你的数据结构设计的不好。应该用如下:ID序号 username(用户名) 菜单  popedom(权限,第1位表删除、2位表添加、3位表修改、4位表审批、5位管理)
    1  gt5070073    新闻     11111
    2  gt5070073    项目     10111
    3  gt5070073    日志     10111
    4  gt5070073    用户管理     10110
    5  gt5070073    文件管理     10111
    ....这样就很容易实现SQL语句。
      

  3.   


    create table tab1(username varchar(100),popedom varchar(100) )
    insert into tab1 values('gt5070073','11111,10111,10111,10110')
    create table tab2 (temname varchar(100),popedom_num int)
    insert into tab2 values('新闻',1)
    insert into tab2 values('项目',2)
    insert into tab2 values('日志',3)
    insert into tab2 values('用户管理 ',4)
    insert into tab2 values('文件管理',5)create function get_str(@username varchar(100),@i int)
    returns varchar(100)
    as
    begin
    declare @m int
    declare @str varchar(100)
    declare @rst varchar(100)
    set @rst=''
    set @m=1
    select @str=popedom from tab1 where username=@usernamewhile @m<@i
    begin
    set @str=stuff(@str,1,6,'')
    set @m=@m+1
    end
    if charindex(',',@str)=0
    begin
    set @rst=@str
    end
    else
    begin
    set @rst=substring(@str,0,charindex(',',@str))
    end
    if @rst =''
    begin
    set @rst='00000'
    end 
    return @rst
    end
    select  b.temname,isnull(substring(dbo.get_str(a.username,b.popedom_num),1,1),0),
    isnull(substring(dbo.get_str(a.username,b.popedom_num),2,1),0),
    isnull(substring(dbo.get_str(a.username,b.popedom_num),3,1),0),
    isnull(substring(dbo.get_str(a.username,b.popedom_num),4,1),0),
    isnull(substring(dbo.get_str(a.username,b.popedom_num),5,1),0)
    from tab1 a,tab2 b
    where a.username='gt5070073'结果temname                                                                                                                       
    ---------------------------------------------------------------------------------------------------- ---- ---- ---- ---- ---- 
    新闻                                                                                                   1    1    1    1    1
    项目                                                                                                   1    0    1    1    1
    日志                                                                                                   1    0    1    1    1
    用户管理                                                                                                 1    0    1    1    0
    文件管理                                                                                                 0    0    0    0    0(所影响的行数为 5 行)
      

  4.   

    呵呵,这个问题我后来在C#中用DATASET搞定了(数据库只读一次就可以解决),不过还是谢谢大家
      

  5.   

    RE:Tongls(空中的风月)
    我用户表不可能产生那样多条记录吧
    RE:Big_Gun(大枪)
    我的项目是一个动态加的,我不可能一下子就全都想好了啊,在说客户的要求来做事啊
    RE:csdnbanqiliao(燎)
    这个结构是不行的,和Tongls(空中的风月)一样的问题