Sql server 在sql server中将列值转换为行名称
我有这个桌子结构Sql server 在sql server中将列值转换为行名称,sql-server,pivot-table,for-xml-path,Sql Server,Pivot Table,For Xml Path,我有这个桌子结构 PRN studentName moduleName theoryMarks 180841220008 Mahendra A 12 180841220009 Mahendra1 A 13 180841220008 Mahendra B
PRN studentName moduleName theoryMarks
180841220008 Mahendra A 12
180841220009 Mahendra1 A 13
180841220008 Mahendra B 12
180841220009 Mahendra1 B 13
我想用下面的格式显示结果
PRN studentName moduleName A moduleName B
180841220008 Mahendra 12 12
180841220009 Mahendra1 13 13
如何做到这一点?我想创建一个结果生成系统并向用户显示数据您可以使用透视表动态,如下所示
DECLARE
@columns NVARCHAR(MAX) = '',
@sql NVARCHAR(MAX) = '';
SELECT PRN, studentName, moduleName,theoryMarks, Col = 'moduleName ' + moduleName
into #b
FROM #a
SELECT @columns += QUOTENAME(Col) + ','
from (SELECT DISTINCT Col FROM #b) A
-- remove the last comma
SET @columns = LEFT(@columns, LEN(@columns) - 1);
SET @sql = 'SELECT * FROM ( SELECT PRN, studentName, theoryMarks, Col FROM #b) src PIVOT( MAX([theoryMarks]) FOR Col IN ('+ @columns +')) AS pivot_table;';
-- execute the dynamic SQL
EXECUTE sp_executesql @sql;
您可以使用透视表动态,如下所示
DECLARE
@columns NVARCHAR(MAX) = '',
@sql NVARCHAR(MAX) = '';
SELECT PRN, studentName, moduleName,theoryMarks, Col = 'moduleName ' + moduleName
into #b
FROM #a
SELECT @columns += QUOTENAME(Col) + ','
from (SELECT DISTINCT Col FROM #b) A
-- remove the last comma
SET @columns = LEFT(@columns, LEN(@columns) - 1);
SET @sql = 'SELECT * FROM ( SELECT PRN, studentName, theoryMarks, Col FROM #b) src PIVOT( MAX([theoryMarks]) FOR Col IN ('+ @columns +')) AS pivot_table;';
-- execute the dynamic SQL
EXECUTE sp_executesql @sql;
请检查这个
Declare @yt TABLE( [PRN] bigint, studentName varchar(500), moduleName varchar(500),theoryMarks varchar(500) );
INSERT INTO @yt ( [PRN], studentName, moduleName, theoryMarks )
VALUES (180841220008, 'Mahendra','A', 12),
(180841220009, 'Mahendra1','A', 13),
(180841220008, 'Mahendra','B', 12),
(180841220009, 'Mahendra1','B', 13)
select [PRN], studentName, moduleName, theoryMarks from @yt
select [PRN], studentName, [A] [moduleName A],[B] [moduleName B]from ( select [PRN], studentName, moduleName, theoryMarks from @yt ) src
pivot
(
max(theoryMarks)
for
moduleName in ([A], [B])
) piv;
输出将是:
如果要对结果进行动态查询,请使用“for XML Path”进行检查
请检查这个
Declare @yt TABLE( [PRN] bigint, studentName varchar(500), moduleName varchar(500),theoryMarks varchar(500) );
INSERT INTO @yt ( [PRN], studentName, moduleName, theoryMarks )
VALUES (180841220008, 'Mahendra','A', 12),
(180841220009, 'Mahendra1','A', 13),
(180841220008, 'Mahendra','B', 12),
(180841220009, 'Mahendra1','B', 13)
select [PRN], studentName, moduleName, theoryMarks from @yt
select [PRN], studentName, [A] [moduleName A],[B] [moduleName B]from ( select [PRN], studentName, moduleName, theoryMarks from @yt ) src
pivot
(
max(theoryMarks)
for
moduleName in ([A], [B])
) piv;
输出将是:
如果要对结果进行动态查询,请使用“for XML Path”进行检查
到目前为止,您尝试了什么?为什么要为xml路径编写,这个标记的效果如何?@Phong我尝试了动态透视表,请告诉我们您的尝试。实际结果和您的问题是什么?选择PRN、studentName、theoryMarks、Advanced Web Programming、Advanced Software Development Methodology(高级Web编程中的颜色选择PRN、studentName、theoryMarks、moduleName)中的PRN、studentName、theoryMarks、moduleName或Data PIVOT sumtheoryMarks,高级软件开发方法学pvt此查询显示orgdataWhat出现错误到目前为止您尝试了什么?为什么要为xml路径编写,此标记如何?@Phong我尝试了动态透视表请告诉我们您的尝试。实际结果和您的问题是什么?选择PRN、studentName、theoryMarks、Advanced Web Programming、Advanced Software Development Methodology(高级Web编程中的颜色选择PRN、studentName、theoryMarks、moduleName)中的PRN、studentName、theoryMarks、moduleName或Data PIVOT sumtheoryMarks,高级软件开发方法学pvt此查询显示orgdataNote中的错误此解决方案不是动态情况moduleName a、moduleName B、moduleName C等。@Ajay2707如何在其中添加序列号result@Ajay2707如果我将PRN asc超额订购的行号添加为SrNo,如何添加序列号以生成您的解决方案,在“查询”中,它会生成意外的result@Ajay2707它不允许在子查询中使用order by,除非我在查询中使用top注意,此解决方案不是动态情况moduleName a、moduleName B、moduleName C,ect.@Ajay2707如何在该文件中添加序列号result@Ajay2707如果我将PRN asc超额订购的行号添加为SrNo,如何添加序列号以生成您的解决方案,在“查询”中,它会生成意外的result@Ajay2707它不允许在子查询中使用ORDERBY,除非我在子查询中使用top inquery@Phonge你的回答对我来说是完美的解决方案problem@Phonge你的回答是我问题的完美解决方案