我有一个表,结构如下:
表名 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
如何做?
表名 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
如何做?
有两个表,一个表为TABLE1, 一个为TABLE2;
TABLE1 表中有许多列,有一个主键 (名为 COL1)
TABLE2 表中有三列,(COL1, COL2, COL3) 其中,COL1 和TABLE1 中的主键对应,而 COL2,COL3 则存储的是TABLE1中列的 名字,我如何 能根据这些列名,得到TABLE1中该列名对应的数据啊?我这样补充,你明白了吗?
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-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 我测试了,不好用。
上面的是我举的例子,你用这个测试吧。谢谢了
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