读书人

怎么在数据表中的多个字段中找到特定的

发布时间: 2012-04-05 12:42:40 作者: rapoo

如何在数据表中的多个字段中找到特定的字符的问题
现在有这样的表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如何写啊。






[解决办法]
如果只是这个表和查询字母S的话
select * from t1 where "s" in(A1,A2,A3,A4)
[解决办法]
--假设你的每个字段,其字母是从A到Z排列,使用系统表和动态sql完成.

SQL code
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 @sqlexec(@sql)drop table tb/*最大值  ---- S*/
[解决办法]
用游标吧,这是最笨的方法了

SQL code
declare @Value varchar(10)declare @Sql varchar(100)declare @Max varchar(10)create table #tmp1(maxvalue varchar(10) null)declare cr_t1 cursor forselect name from syscolumns where id=object_id('t1') and name <> 'ID' --从系统表中找到有多少个字段要计算open cr_t1FETCH NEXT FROM cr_t1into @ValueWHILE @@FETCH_STATUS = 0BEGIN  exec ('insert into #tmp1 select Max = max('+ @Value +') from tbdde1')  FETCH NEXT FROM cr_t1 INTO @ValueENDCLOSE cr_t1DEALLOCATE cr_t1select max(maxvalue) from #tmp1 

读书人网 >SQL Server

热点推荐