现在有这样的表t1
表结构是这样的:
id a1 a2 a3 a4 ....
1 A B C D
2 B C D E
3 C A G CD
4 A B S AB
5 C D E C
6 B A F C
7 G B A C
...
其中表的T1是动态创建的,字段数量是未知的,意思就是T1表字段可能到A4,下一次T1表的字段可能就到A20了现在想从这个表中查出最大字母来怎么做。比如上表的最大的字母是“S”。
这个SQL如何写啊。
表结构是这样的:
id a1 a2 a3 a4 ....
1 A B C D
2 B C D E
3 C A G CD
4 A B S AB
5 C D E C
6 B A F C
7 G B A C
...
其中表的T1是动态创建的,字段数量是未知的,意思就是T1表字段可能到A4,下一次T1表的字段可能就到A20了现在想从这个表中查出最大字母来怎么做。比如上表的最大的字母是“S”。
这个SQL如何写啊。
select * from t1 where "s" in(A1,A2,A3,A4)
create table tb(id int,a1 varchar(10),a2 varchar(10),a3 varchar(10),a4 varchar(10))
insert into tb values(1 ,'A', 'B', 'C', 'D')
insert into tb values(2 ,'B', 'C', 'D', 'E')
insert into tb values(3 ,'C', 'A', 'G', 'CD')
insert into tb values(4 ,'A', 'B', 'S', 'AB')
insert into tb values(5 ,'C', 'D', 'E', 'C')
insert into tb values(6 ,'B', 'A', 'F', 'C')
insert into tb values(7 ,'G', 'B', 'A', 'C')
godeclare @sql varchar(8000)
select @sql=isnull(@sql + 'select left(reverse(','') + name + '),1) a from tb union '
from syscolumns where id=object_id('tb') and name != 'ID'
select @sql='select max(a) 最大值 from (select left(reverse(' + left(@sql,len(@sql) - 5) + ') t'
--print @sql
exec(@sql)drop table tb/*
最大值
----
S*/
这样的,不是从A。。Z排列的
declare @Value varchar(10)
declare @Sql varchar(100)
declare @Max varchar(10)create table #tmp1(maxvalue varchar(10) null)declare cr_t1 cursor for
select name from syscolumns
where id=object_id('t1') and name <> 'ID' --从系统表中找到有多少个字段要计算open cr_t1FETCH NEXT FROM cr_t1
into @ValueWHILE @@FETCH_STATUS = 0
BEGIN exec ('insert into #tmp1 select Max = max('+ @Value +') from tbdde1') FETCH NEXT FROM cr_t1 INTO @Value
END
CLOSE cr_t1
DEALLOCATE cr_t1select max(maxvalue) from #tmp1