矩阵转换

本文介绍了一种使用SQL动态构建复杂查询的方法。通过声明变量并利用系统表syscolumns来生成动态SQL,实现对表tb的多条件查询及数据展示。此方法适用于需要灵活调整查询条件的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

--测试数据   
create   table   tb(   O   char(1),X   varchar(10),Y   varchar(10),Z   varchar(10))   
insert   tb   select   'A','x1','y1','z1'   
union   all   select   'B','x2','y2','z2'   
union   all   select   'C','x3','y3','z3'   
go 
declare @s1 varchar(8000),@s2 varchar(8000),@s3 varchar(8000),
    
@s4 varchar(8000),@s5 varchar(8000),@i  varchar(10)     
select   @s1='',@s2='',@s3='',@s4='',@s5='',@i='0'     
select   
     
@s1=@s1+',@'+@i+'   varchar(8000)'     
    ,
@s2=@s2+',@'+@i+'=''O='''''+name+''''''''     
    ,
@s3=@s3+',@'+@i+'=@'+@i+'+'',[''+cast([O]   as   varchar)+'']=''''''+cast(['+name+']   as   varchar)+'''''''''     
    ,
@s4=@s4+',@'+@i+'=''select   ''+@'+@i     
    ,
@s5=@s5+'+'' union all ''+@'+@i     
    ,
@i=cast(@i   as   int)+1     
from   syscolumns     
where   object_id('tb')=id   and   colid>1     
order   by   colid     
       
select   
     
@s1=stuff(@s1,1,1,'')     
    ,
@s2=stuff(@s2,1,1,'')     
    ,
@s3=stuff(@s3,1,1,'')     
    ,
@s4=stuff(@s4,1,1,'')     
    ,
@s5=stuff(@s5,1,15,'')    
  
select * from tb

/*
O    X    Y    Z
---------------------------
A    x1    y1    z1
B    x2    y2    z2
C    x3    y3    z3
*/

exec('declare '+@s1+'     
      select   
'+@s2+'     
      select   
'+@s3+'     
      from   tb     
      select   
'+@s4+'     
      exec(
'+@s5+')')  
  
/* 
O    A    B    C
-------------------------------
X    x1    x2    x3
Y    y1    y2    y3
Z    z1    z2    z3
*/



drop   table   tb     
 


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值