相关文章推荐
近视的熊猫  ·  Transformer Based ...·  7 月前    · 
飞翔的饺子  ·  @ApiResponse & ...·  1 年前    · 
大鼻子的奔马  ·  Advanced settings ...·  1 年前    · 

sqlserver使用存储过程将列数据当成列名并查询查询数据

二、模拟表

id name size number
1 a S 4
2 a M 8
3 a L 4
4 a M 7
5 c S 4
6 b M 8
7 c S 4
8 d M 8
9 d S 4
10 e M 8
11 d S 4
12 d M 8

三、要实现的效果

id name S M L
id name S M L
1 a S 4 15
  1. 先把Size全查询出来,作为列名,创建临时表

    1. 从表中读取size,并存入临时表
    	IF Object_Id('tempdb.dbo.##size_table') is not null  
    		drop table ##size_table  
    	select *
    	into ##size_table
    	from (
    		select distinct Size from table
      
    1. 使用for xml path(’’)将临时表数据以xml的形式读取并拼装成字符串
    	declare @size_columns varchar(max) = ''
    	set @size_columns = ( select '[' + Size + '] int,'
    			  from ##size_table 
    			  for xml path('')	
      
    1. 创建临时表
    	IF Object_Id('tempdb.dbo.##table') is not null  
    	drop table ##table  
    	declare @sql1 nvarchar(max) 
    	set @sql1= N'
      		create table ##table  
    		   id int,  
    		   name varchar(10),'
    		   + @size_columns)'
      	exec( @sql1 )
    
  2. 查询数据时,根据name分组查询,根据size的不同,计算number的和

    1. 读取临时表,拼装成size列名
    	declare @size_insert nvarchar(max)
    	set @size_insert = ( select ',[' + Size + ']' from ##size_table for xml path('') ) 
      
    1. 拼装成case方式,用于读取数据
    	declare @size_Pcs_Qty nvarchar(max)
    	set @size_Pcs_Qty = ( select ',sum(case when b.Size=''' + Size + ''' then Pcs_Qty else 0 end) as [' + Size + ']'
    			  from ##size_table 
    			  for xml path('')	
      
    1. 将数据插入临时表
    	declare @sql2 nvarchar(max)
    	set @sql2 = N'
    	insert ##table  
    	 id, name' + @size_insert )  
    	select id, name' + @size_Pcs_Qty + 'from table'
    
  3. 最后查询临时表数据

    	select * from ##table
    
    1. 临时表要使用##,因为#作用域只是存在于一个exec中,别的地方无法调用
    2. 不可使用##,会影响数据库服务器性能
    将列数据当成列名并查询查询数据一、需求二、模拟表三、要实现的效果四、思路注意事项一、需求sqlserver使用存储过程将列数据当成列名并查询查询数据二、模拟表项目Value电脑$1600手机$12导管$1idnamesizenumber1aS42aM83aL44aM75cS46bM87cS48dM89dS410eM8 DROP TABLE IF EXISTS `loginuser`; CREATE TABLE `loginuser` (   `weight` double DEFAULT NULL COMMENT '体重',   `height` double DEFAULT NULL COMMENT '身高',   `user_id` v 查询语句: select sno,sname,sum(语文) 语文,sum(数学) 数学,sum(英语) 英语 from (select sno,sname,decode(subjiect,'语文',grade) 语文,decode(subjiect,'数学',grade) 数学,decode(subjiect,'英语',grade) 英语 from MYOBJECT) gro...
    你可以使用 Python 的解释器来执行代码,而不需要将空格键作为程序的开始。在 Python 中,代码块是通过缩进来定义的,而不是通过空格键。因此,你只需要在代码中使用正确的缩进即可。例如: if True: print("Hello, World!") 在这个例子中,代码块是通过缩进来定义的,而不是通过空格键。因此,你可以使用空格键来输入代码,但是它并不是程序的开始。