如果A表中的OrgUnitTypeRoleId 值为1的话,C表将对应有6条记录,PermissionId分别是“100001”,“100002”......"100007",如果A表中的OrgUnitTypeRoleId 值为2的话,C表对应的记录将不同。----------------为2  是什么情况呢,看不出规律

解决方案 »

  1.   

    是2的话,PermissionId将是“100003”,“100004”也就是说增加两条记录
      

  2.   

    感觉这个不能用sql语句实现吧?太复杂了,我都有点晕了,难道是快要下班的缘故?
      

  3.   

    还是看不明白你说的是什么意思
    1的时候是这样
                            20,34,100001
                            20,34,100002
                            20,34,100003
                            20,34,100004
                            20,34,100005
                            20,34,100006
    是2的话,PermissionId将是“100003”,“100004”也就是说增加两条记录
    那是什么结果???????
    写出来
      

  4.   

    你说不规律,那我就写一个不能用的
    declare @UnitUser table(UserID int,OrgUnitID int,OrgUnitTypeRoleId int)
    declare @SubscriptionOrgs table(SubscriptionId int,OrgUnitId int)insert @UnitUser select 34,2,1
    insert @SubscriptionOrgs select 20,2
    drop table #tmp
    select top 100 rowid=identity(int,1,1),'10000' as d into #tmp from sysobjects select a.userid,b.SubscriptionId ,c.dd from @UnitUser a,@SubscriptionOrgs b
    cross join 
    ( select top 6 (d+ convert(varchar(2),rowid)) as dd from #tmp  ) c
    /*
    userid      SubscriptionId dd      
    ----------- -------------- ------- 
    34          20             100001
    34          20             100002
    34          20             100003
    34          20             100004
    34          20             100005
    34          20             100006
    */
      

  5.   

    我要插入的就是PermissionId为1和2的两种情况A: OrgUnitUser(UserID, OrgUnitID, OrgUnitTypeRoleId);
    B: SubscriptionOrgs(SubscriptionId, OrgUnitId)
    若A表中有记录:35, 20, 2
    B表中有记录:  21,20
    则C表
    C: UserPermission(SubscriptionID, UserID, PermissionId);
    中对应应该有记录:
         21,35,100003
                           21,35,100004
    只是从A表中选择OrgUnitTypeRoleId为1或2的记录
      

  6.   

    happyflystone(仙林幽谷客) :您写得太复杂啦,我不懂~
      

  7.   

    declare @UnitUser table(UserID int,OrgUnitID int,OrgUnitTypeRoleId int)
    declare @SubscriptionOrgs table(SubscriptionId int,OrgUnitId int)
    --以上是定义二表
    insert @UnitUser select 34,2,1
    insert @SubscriptionOrgs select 20,2
    --以上插入数据
    drop table #tmp
    -- 删除表
    select top 100 rowid=identity(int,1,1),'10000' as d into #tmp from sysobjects 
    --产生中间数据
    select a.userid,b.SubscriptionId ,c.dd from @UnitUser a,@SubscriptionOrgs b
    cross join 
    ( select top 6 (d+ convert(varchar(2),rowid)) as dd from #tmp  ) c
    -- SQL语句
    /*
    userid      SubscriptionId dd      
    ----------- -------------- ------- 
    34          20             100001
    34          20             100002
    34          20             100003
    34          20             100004
    34          20             100005
    34          20             100006
    */
      

  8.   

    declare @UnitUser table(UserID int,OrgUnitID int,OrgUnitTypeRoleId int)
    declare @SubscriptionOrgs table(SubscriptionId int,OrgUnitId int)insert @UnitUser select 34,2,1
    insert @UnitUser select 34,3,2
    insert @SubscriptionOrgs select 20,2
    insert @SubscriptionOrgs select 30,3drop table #tmp
    select top 100 rowid=identity(int,1,1),'10000' as d into #tmp from sysobjects select a.userid,b.SubscriptionId ,c.dd from @UnitUser a,@SubscriptionOrgs b
    cross join 
    ( select top 6 (d+ convert(varchar(2),rowid)) as dd from #tmp  ) c 
    where a.OrgUnitTypeRoleId = 1 and a.OrgUnitID = b.OrgUnitIDunion all
    select a.userid,b.SubscriptionId ,c.dd from @UnitUser a,@SubscriptionOrgs b
    cross join 
    ( select top 2 (d+ convert(varchar(2),rowid)) as dd from #tmp where rowid >2 ) c 
    where a.OrgUnitTypeRoleId = 2 and a.OrgUnitID = b.OrgUnitID/*
    userid      SubscriptionId dd      
    ----------- -------------- ------- 
    34          20             100001
    34          20             100002
    34          20             100003
    34          20             100004
    34          20             100005
    34          20             100006
    34          30             100003
    34          30             100004
    */