SSMS - Sql,从表中选择数据以创建数据透视结果
Posted
技术标签:
【中文标题】SSMS - Sql,从表中选择数据以创建数据透视结果【英文标题】:MSSMS - Sql, Select data from table to create a pivot result 【发布时间】:2021-07-23 11:50:22 【问题描述】:我有 TABLE1 以下列为SELECT
结果:
[ID] [Name] [Type] [Score]
1 | Aris | A | 100
1 | Aris | B | 150
1 | Aris | C | 200
2 | Nina | A | 1000
2 | Nina | B | 1500
2 | Nina | C | 2000
3 | Mary | A | 10000
3 | Mary | B | 15000
3 | Mary | C | 20000
我想做的是查询 TABLE1 或创建一个单独的视图来产生这种结构:
[Id] [Name] [Type A] [Type B] [Type C]
1 | Aris | 100 | 150 | 200
2 | Nina | 1000 | 1500 | 2000
3 | Mary | 10000 | 15000 | 20000
结果是一个数据透视表,我面临的问题是在对所有条目进行分组时...... 我已经查看过类似 pivot 的内容,但对于我的方法来说太复杂了。
任何帮助将不胜感激!谢谢!
【问题讨论】:
mysql 和 sql-server 是不同的 DBMS。只标记你真正使用的一个。 您需要的是一个简单的PIVOT
查询。语法和示例参考documentation
“对于我的方法来说太复杂了。” 不过,您所寻求的解决方案将会转向;使用PIVOT
运算符或条件聚合。如果在 RDBMS 中进行旋转“太复杂”,则改为在应用层中进行。如果您要使用这些答案,则由您来理解它们;如果你不理解它们,你就不应该使用它们。
@Larnu 谢谢你的亮点,我已经在应用层解决了,我的考虑也是学习一种使用sql语法的新方法。我不是 sql 专家,这就是为什么“复杂”!
【参考方案1】:
对于任何感兴趣的人,我已经设法通过这个查询来处理上述过程:
WITH Pivoted
AS
(
SELECT * FROM
(SELECT * FROM TABLE1)
AS eidos
PIVOT( MAX(Score) FOR [Type] IN ([A],[B],[C])) AS myPivot
)
SELECT
MAX(ID) AS ID,
MAX(NAME) AS NAME,
MAX(A) AS [TYPE A],
MAX(B) AS [TYPE B],
MAX(C) AS [TYPE C]
FROM Pivoted
【讨论】:
以上是关于SSMS - Sql,从表中选择数据以创建数据透视结果的主要内容,如果未能解决你的问题,请参考以下文章