![](/img/trans.png)
[英]SQL Server : select all rows from a column after the 1st row with matching value from the same column
[英]sql select query convert 1st column as header and second column as row?
是否可以将第一列转换为标题,将第二列转换为行? 请在下面找到一个例子
Type | qty (Header)
Apple 4
Orange 10
Grapes 5
Apple | Orange | Grapes (Header)
4 10 5
在SQL Server中,存在STUFF()和EXEC()函数以进行相同的动态查询。
select @script = STUFF( SELECT qty + ' AS ' + type + ', ' from table_orig);
EXEC (@script);
在MySql中,可以使用EXECUTE:
SET @sqltxt = null;
SELECT GROUP_CONCAT(CONCAT( qty, ' AS ', type, ' ') ) INTO @sqltxt
FROM table_orig;
SET @sqltxt = concat('SELECT ', @sqltxt , ' FROM DUAL');
PREPARE stmt FROM @sqltxt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
祝好运,
-只是一些样品
create table #fruits ([type] varchar(10), quantity int)
insert into #fruits select 'Apple',4 union all select 'Orange', 10 union all select 'Grapes', 5
-首先获得唯一的[结果]集
declare @sqlStr varchar(max)
select @sqlStr = '['+
replace(
stuff((select distinct ','+[type] as [text()]
from #fruits s
for xml path ('')) ,1,1,'')
,',','],[') + ']'
from #fruits s1
select @sqlStr
-组装动态查询
declare @sqlStr1 varchar(max)
set @sqlStr1 = 'select *
from #fruits a
pivot (sum (quantity) for [type] in ('+@sqlStr+')
) p'
-运行动态查询
exec (@sqlStr1)
希望这可以帮助
创建永久表的附加
declare @sqlStr1 varchar(max)
set @sqlStr1 = 'IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[TblFruits]'') AND type in (N''U''))
DROP TABLE [dbo].[TblFruits]
select *
into TblFruits
from #fruits a
pivot (sum (quantity) for [type] in ('+@sqlStr+')
) p'
-- run dynamic query
exec (@sqlStr1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.