有表1数据如下
名称1  名称2  名称3  名称4  名称5
A       B      C       D      E  
ast     sch    shf     shlj   asdf
dads    adsf   dsa     asdfd  dsf
dfdsa   dfd    dasf    df     dfsdd
想把每一个字段中第一行的内容作为该字段的类别标签插入该字段中。达到如下目的:
生成表2
名称1  类别1  名称2  类别2  名称3  类别3  名称4  类别4  名称5  类别5
ast     A     sch    B      shf     C      shlj   D     asdf    E
dads    A    adsf    B      dsa     C      asdfd  D     dsf     E
dfdsa   A    dfd     B      dasf    C      df     D     dfsdd   E
最终得到表3
名称  类别
ast     A
dads    A
dfdsa   A
sch     B
adsf    B
dfd     B
shf     C
dsa     C
dasf    C
shlj    D
asdfd   D
df      D
asdf    E
dsf     E
dfsdd   E
因为表1的字段太多有几千个,该如何写程序。求教高手。。

解决方案 »

  1.   


    --> (让你望见影子的墙)生成测试数据,时间:2008-12-08
     
    if not object_id('tb') is null
    drop table tb
    Go
    Create table tb([名称1] nvarchar(5),[名称2] nvarchar(4),[名称3] nvarchar(4),[名称4] nvarchar(5),[名称5] nvarchar(5))
    Insert tb
    select N'A',N'B',N'C',N'D',N'E' union all
    select N'ast',N'sch',N'shf',N'shlj',N'asdf' union all
    select N'dads',N'adsf',N'dsa',N'asdfd',N'dsf' union all
    select N'dfdsa',N'dfd',N'dasf',N'df',N'dfsdd'
    Go
    Select * from tb
    select 名称1,类别1='A',[名称2],类别2='B',[名称3],类别3='C',[名称4],类别4='D',[名称5],类别5='E'
     into # from tb
    where 名称1<>'A'select 名称1,类别1
    from #
    union all
    select 名称2,类别2
    from #
    union all
    select 名称3,类别3
    from #
    union all
    select 名称4,类别4
    from #
    union all
    select 名称5,类别5
    from #ast A
    dads A
    dfdsa A
    sch B
    adsf B
    dfd B
    shf C
    dsa C
    dasf C
    shlj D
    asdfd D
    df D
    asdf E
    dsf E
    dfsdd E
      

  2.   

    CREATE TABLE TB(COL1 VARCHAR(6),COL2 VARCHAR(6),COL3 VARCHAR(6),COL4 VARCHAR(6),COL5 VARCHAR(6))
    INSERT TB
    SELECT 'A',  'B',  'C',  'D',  'E' UNION ALL 
    SELECT 'ast',  'sch',  'shf',  'shlj',  'asdf' UNION ALL 
    SELECT 'dads',  'adsf',  'dsa',  'asdfd',  'dsf' UNION ALL 
    SELECT 'dfdsa',  'dfd',  'dasf',  'df',  'dfsdd'SELECT COL1,'A' FROM TB UNION ALL
    SELECT COL2,'B' FROM TB UNION ALL
    SELECT COL3,'C' FROM TB UNION ALL
    SELECT COL4,'D' FROM TB UNION ALL
    SELECT COL5,'E' FROM TBDROP TABLE TB
      

  3.   

    动态:
    CREATE TABLE TB(COL1 VARCHAR(6),COL2 VARCHAR(6),COL3 VARCHAR(6),COL4 VARCHAR(6),COL5 VARCHAR(6))
    INSERT TB
    SELECT 'A',  'B',  'C',  'D',  'E' UNION ALL 
    SELECT 'ast',  'sch',  'shf',  'shlj',  'asdf' UNION ALL 
    SELECT 'dads',  'adsf',  'dsa',  'asdfd',  'dsf' UNION ALL 
    SELECT 'dfdsa',  'dfd',  'dasf',  'df',  'dfsdd'DECLARE @SQL VARCHAR(8000)
    SET @SQL=''
    SELECT @SQL=@SQL+' UNION ALL SELECT '+NAME+',(SELECT TOP 1 '+NAME+' FROM TB) FROM TB '
    FROM SYSCOLUMNS 
    WHERE ID=OBJECT_ID('TB')SET @SQL=STUFF(@SQL,1,10,'')EXEC(@SQL)DROP TABLE TB
    /*
    COL1        
    ------ ---- 
    A      A
    ast    A
    dads   A
    dfdsa  A
    B      B
    sch    B
    adsf   B
    dfd    B
    C      C
    shf    C
    dsa    C
    dasf   C
    D      D
    shlj   D
    asdfd  D
    df     D
    E      E
    asdf   E
    dsf    E
    dfsdd  E
    */