CREATE TABLE [dbo].[USER_BAOMING] (
[身份证号] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[姓名] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[性别] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
[出生日期] [datetime] NULL ,
[工作单位] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[职务职称] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[是否离退休] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[岗位系列] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[是否置换区职工] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[是否双职工] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[备注] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
[审核标志] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[电子邮件] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[手机座机] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[得分] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[排队方式] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[座机] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO
表结构如上,现要进行一个排队,其中有一个字段为 是否离退休  
如果否,即为该同志“在职”,在其它表中代码为: 1010,如果是,代码为1000,
现在职与离退休要穿叉排队,比例为5:1,即5名在职职工后穿叉一名离退休职工,请问此如何进行,请各位帮帮忙,谢谢了。

解决方案 »

  1.   

    if object_id('pubs..tb') is not null
       drop table tb
    gocreate table tb(身份证号 varchar(18) , 是否离退休 varchar(4))
    insert into tb(身份证号,是否离退休) values('00000000000000000','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000001','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000002','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000003','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000004','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000005','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000006','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000007','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000008','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000009','1010')
    insert into tb(身份证号,是否离退休) values('10000000000000000','1000')
    insert into tb(身份证号,是否离退休) values('20000000000000000','1000')
    goselect px = identity(int,1,1) , * into tb1 from tb where 是否离退休 = '1010' order by 身份证号
    select px = identity(int,1,1) , * into tb2 from tb where 是否离退休 = '1000' order by 身份证号select 身份证号,是否离退休 from
    (
      select (px-1)/5 + 1 px , 身份证号,是否离退休 from tb1
      union all
      select * from tb2
    ) t
    order by px , 身份证号
    drop table tb,tb1,tb2/*
    身份证号           是否离退休 
    ------------------ ----- 
    00000000000000000  1010
    00000000000000001  1010
    00000000000000002  1010
    00000000000000003  1010
    00000000000000004  1010
    10000000000000000  1000
    00000000000000005  1010
    00000000000000006  1010
    00000000000000007  1010
    00000000000000008  1010
    00000000000000009  1010
    20000000000000000  1000(所影响的行数为 12 行)
    */
      

  2.   

    --借用楼上数据 create table tb(身份证号 varchar(18) , 是否离退休 varchar(4))
    insert into tb(身份证号,是否离退休) values('00000000000000000','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000001','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000002','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000003','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000004','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000005','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000006','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000007','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000008','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000009','1010')
    insert into tb(身份证号,是否离退休) values('10000000000000000','1000')
    insert into tb(身份证号,是否离退休) values('20000000000000000','1000')
    go
    --生成的临时表px字段,初始值为10,布进值为10
    select identity(int,10,10) as px , * into tb1 from tb where 是否离退休 = '1010' order by 身份证号--生成的临时表px字段,初始值为50,布进值为50
    select identity(int,50,50) as px , * into tb2 from tb where 是否离退休 = '1000' order by 身份证号
    --50之后插一个51,100之后插一个101,以此类推
    select px,身份证号,是否离退休 from
    (
      select  px , 身份证号,是否离退休 from tb1
      union all
      select  px+1 , 身份证号,是否离退休 from tb2
    ) t
    order by px , 身份证号drop table tb,tb1,tb2
      

  3.   

    --借用楼上数据 create table tb(身份证号 varchar(18) , 是否离退休 varchar(4))
    insert into tb(身份证号,是否离退休) values('00000000000000000','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000001','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000002','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000003','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000004','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000005','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000006','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000007','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000008','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000009','1010')
    insert into tb(身份证号,是否离退休) values('10000000000000000','1000')
    insert into tb(身份证号,是否离退休) values('20000000000000000','1000')
    go
    --生成的临时表px字段,初始值为10,布进值为10
    select identity(int,10,10) as px , * into tb1 from tb where 是否离退休 = '1010' order by 身份证号--生成的临时表px字段,初始值为50,布进值为50
    select identity(int,50,50) as px , * into tb2 from tb where 是否离退休 = '1000' order by 身份证号
    --50之后插一个51,100之后插一个101,以此类推
    select px,身份证号,是否离退休 from
    (
      select  px , 身份证号,是否离退休 from tb1
      union all
      select  px+1 , 身份证号,是否离退休 from tb2
    ) t
    order by px , 身份证号drop table tb,tb1,tb2
    /*px          身份证号               是否离退休 
    ----------- ------------------ ----- 
    10          00000000000000000  1010
    20          00000000000000001  1010
    30          00000000000000002  1010
    40          00000000000000003  1010
    50          00000000000000004  1010
    51          10000000000000000  1000
    60          00000000000000005  1010
    70          00000000000000006  1010
    80          00000000000000007  1010
    90          00000000000000008  1010
    100         00000000000000009  1010
    101         20000000000000000  1000*/
      

  4.   

    create table tb(身份证号 varchar(18) , 是否离退休 varchar(4))
    insert into tb(身份证号,是否离退休) values('00000000000000000','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000001','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000002','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000003','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000004','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000005','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000006','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000007','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000008','1010')
    insert into tb(身份证号,是否离退休) values('00000000000000009','1010')
    insert into tb(身份证号,是否离退休) values('10000000000000000','1000')
    insert into tb(身份证号,是否离退休) values('20000000000000000','1000')
    goselect px = identity(int,1,1) , * into tb1 from tb where 是否离退休 = '1010' order by 身份证号
    select px = identity(int,1,1) , * into tb2 from tb where 是否离退休 = '1000' order by 身份证号select *
    from 
    (select * from tb1
    union all 
    select px*5,身份证号,是否离退休 from tb2
    )tmp order by px asc,是否离退休 descpx          身份证号               是否离退休
    ----------- ------------------ -----
    1           00000000000000000  1010
    2           00000000000000001  1010
    3           00000000000000002  1010
    4           00000000000000003  1010
    5           00000000000000004  1010
    5           10000000000000000  1000
    6           00000000000000005  1010
    7           00000000000000006  1010
    8           00000000000000007  1010
    9           00000000000000008  1010
    10          00000000000000009  1010
    10          20000000000000000  1000(12 行受影响)