我有一个表,结构如下:
  表名 TABLE1
  列名: ACS1     ACS2     ACS3......ACS20
    数据   X1     X2        X3   .... AE  表2  TABLE2
   列名  ACS1  FEL1   FEL2
   其中 “ACS1”的值与TABLE1中“ACS1"的值一样,但是,FEL1,FEL2中存在是表TABLE1中列的名字。
    举例: ACS1  FEL1   FEL2
             X1   ACS4    ACS10
             X2   ACS4    ACS1
             X3   ACS5    ACS22
  我需要的是根据TABLE2中指定的字段,得到该字段对应的值。
结果如下:
             ACS1  FEL1   FEL2    ACS4  ACS10
             X1   ACS4    ACS10   X4     X10
             X2   ACS4    ACS1    X4     X10
             X3   ACS5    ACS22   X5     X22
如何做?

解决方案 »

  1.   

    我想表达的意思是 :
      有两个表,一个表为TABLE1, 一个为TABLE2;
      TABLE1 表中有许多列,有一个主键 (名为 COL1)
      TABLE2 表中有三列,(COL1, COL2, COL3) 其中,COL1 和TABLE1 中的主键对应,而 COL2,COL3 则存储的是TABLE1中列的 名字,我如何 能根据这些列名,得到TABLE1中该列名对应的数据啊?我这样补充,你明白了吗?
      

  2.   


    DECLARE @SQL VARCHAR(8000)
    SET @SQL = '';
    SELECT @SQL = ',(SELECT TOP 1 ' + FEL1 + ' FROM TABLE1 WHERE ACS1=T1.ACS1 ) AS ['+FEL1 +'] '
    FROM TABLE2 SET @SQL = 'SELECT T1.* '+@SQL + ' FROM TABLE2 T1 '
    EXEC (@SQL)
      

  3.   

    把table1列转行 然后与table2关联嘛。
      

  4.   

     表1 TABLE1QU1 STDT SUDT SFDT UFDT 
    3-SA 20120101 20120504 20120708 20120910 
    1-HA 20121010 20120401 20120727 20120501 
    2-TD 20121001 20120602 20121231 20120512 
    3-HA 20121101 20120805 20120110 20120807 
         
    表2 TABLE2     
         
    QU1 FEL1 FEL2   
    3-SA SUDT UFDT   
    1-HA STDT SUDT   
    2-TD SUDT SFDT   
    3-HA SFDT STDT   
         
    结果如下:     
    QU1 FEL1 FEL2 S1 S2 
    3-SA SUDT UFDT 20120504 20120910 
    1-HA STDT SUDT 20121010 20120401 
    2-TD SUDT SFDT 20120602 20121231 
    3-HA SFDT STDT 20120110 20121101 我测试了,不好用。
    上面的是我举的例子,你用这个测试吧。谢谢了
      

  5.   


    CREATE TABLE TABLE1
    (
    QU1 VARCHAR(100),
    STDT VARCHAR(100),
    SUDT VARCHAR(100),
    SFDT VARCHAR(100),
    UFDT  VARCHAR(100)
    )CREATE TABLE TABLE2
    (
    QU1 VARCHAR(100),
    FEL1 VARCHAR(100),
    FEL2 VARCHAR(100)
    )GOINSERT INTO TABLE1
    SELECT '3-SA','20120101','20120504','20120708','20120910'
    UNION ALL
    SELECT '1-HA','20121010','20120401','20120727','20120501'
    UNION ALL
    SELECT '2-TD','20121001','20120602','20121231','20120512'  
    UNION ALL
    SELECT '3-HA','20121101','20120805','20120110','20120807'  INSERT INTO TABLE2
    SELECT '3-SA','SUDT','UFDT'
    UNION ALL
    SELECT '1-HA','STDT','SUDT'
    UNION ALL
    SELECT '2-TD','SUDT','SFDT'
    UNION ALL
    SELECT '3-HA','SFDT','STDT'SELECT * FROM TABLE1
    SELECT * FROM TABLE2GOCREATE TABLE #TAB(P1 VARCHAR(100),P2 VARCHAR(100),P3 VARCHAR(100),P4 VARCHAR(100),P5 VARCHAR(100))DECLARE @SQL VARCHAR(8000),@P1 VARCHAR(100),@P2 VARCHAR(100),@P3 VARCHAR(100)
    EXEC (@SQL)
    DECLARE CUR_SOR CURSOR FOR 
    SELECT * FROM TABLE2
    OPEN CUR_SOR
    FETCH NEXT FROM CUR_SOR INTO @P1,@P2,@P3
    WHILE @@FETCH_STATUS=0
    BEGIN

    SET @SQL = 'INSERT INTO #TAB ' +
     ' SELECT '''+@P1+''' ,''' + @P2 + ''',''' + @P3+''','+
     @P2+',' + @P3 +' FROM TABLE1 WHERE QU1='''+@P1+''' '
     EXEC (@SQL)
    FETCH NEXT FROM CUR_SOR INTO @P1,@P2,@P3
    ENDCLOSE CUR_SOR
    DEALLOCATE CUR_SORSELECT * FROM #TAB
    DROP TABLE #TABGODROP TABLE TABLE1
    DROP TABLE TABLE2