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
|
-
先把Size全查询出来,作为列名,创建临时表
-
从表中读取size,并存入临时表
IF Object_Id('tempdb.dbo.##size_table') is not null
drop table
select *
into
from (
select distinct Size from table
- 使用for xml path(’’)将临时表数据以xml的形式读取并拼装成字符串
declare @size_columns varchar(max) = ''
set @size_columns = ( select '[' + Size + '] int,'
from
for xml path('')
- 创建临时表
IF Object_Id('tempdb.dbo.##table') is not null
drop table
declare @sql1 nvarchar(max)
set @sql1= N'
create table ##table
id int,
name varchar(10),'
+ @size_columns)'
exec( @sql1 )
-
查询数据时,根据name分组查询,根据size的不同,计算number的和
-
读取临时表,拼装成size列名
declare @size_insert nvarchar(max)
set @size_insert = ( select ',[' + Size + ']' from
- 拼装成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
for xml path('')
- 将数据插入临时表
declare @sql2 nvarchar(max)
set @sql2 = N'
insert ##table
id, name' + @size_insert )
select id, name' + @size_Pcs_Qty + 'from table'
-
最后查询临时表数据
select * from
临时表要使用##
,因为#
作用域只是存在于一个exec
中,别的地方无法调用- 不可使用
##
,会影响数据库服务器性能
将列数据当成列名并查询查询数据一、需求二、模拟表三、要实现的效果四、思路注意事项一、需求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!")
在这个例子中,代码块是通过缩进来定义的,而不是通过空格键。因此,你可以使用空格键来输入代码,但是它并不是程序的开始。