sql-server - 在 SQL Server 中使用动态查询进行透视
问题描述
脚本
DECLARE @Names AS TABLE(ID INT, Name VARCHAR(MAX))
INSERT INTO @Names
VALUES (1, 'Paul'), (2, 'John'), (3, 'Tayler');
DECLARE @PersonInfo AS TABLE
(
ID INT,
NameID INT,
Subject VARCHAR(100),
Marks FLOAT
)
INSERT INTO @PersonInfo
VALUES (1, 1, 'Maths', 95.34), (2, 2, 'Science', 32.12),
(3, 3, 'History', 23.21), (4, 2, 'Maths', 32.4),
(5, 3, 'Science', 60.34), (6, 1, 'Music', 60.23);
SELECT * FROM @PersonInfo
我尝试使用PIVOT
表达式生成动态列,但没有运气。谁能给我一个想法或解决方案来生成以下输出。提前致谢
预期的解决方案:
Subject Paul John Tayler
-----------------------------------
Maths 95.34 32.4
Science 32.12 60.34
History 23.21
Music 60.23
解决方案
使用PIVOT
您可以达到预期的结果:
;WITH Result AS (
SELECT
P.Subject, N.Name, P.Marks
FROM @PersonInfo P
INNER JOIN @Names N ON N.ID = P.NameID
)
SELECT *
FROM Result
PIVOT (Max(Marks) FOR Name IN (Paul, John, Tayler)) R
推荐阅读
- java - WSL 2 中的 JavaFX 错误:无法打开显示
- sql - 每天访问我的商店 4 次或超过 4 次的 user_id 的每日计数
- python - 部署 gcloud python 应用程序时出错 - 它是什么?
- javascript - 打开后如何将屏幕阅读器焦点更改为 vuetify modal?
- python - 如何将 str "6\u2009000" 转换为 int()
- javascript - 范围条速度
- python - Pymongo:我想在 $push/$pop 操作后使用 $min 和 $max 更新文档的第一个和最后一个字段
- wordpress - 重定向循环问题,elements + elementor
- javascript - 当用户尝试截取网站的屏幕截图时如何使屏幕空白?
- snowflake-cloud-data-platform - 如何根据两个表上的一个字段/列更新行