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,从表中选择数据以创建数据透视结果的主要内容,如果未能解决你的问题,请参考以下文章

mysql 根据数据所在的表从表中选择

PL/SQL:如何从表中选择数据并输入到包接受数组类型?

从表中的两列中选择相同的数据,并使用一条sql语句显示所有数据

从表中选择数值,其中数值以逗号分隔的字符串。

将数据透视结果附加(插入)到现有 SQL 表中

如何从表中选择数据以转置或交叉表方式输出?