【问题标题】:How to make pivot table of a non numeric table in Microsoft SQL Server?如何在 Microsoft SQL Server 中制作非数值表的数据透视表?
【发布时间】:2021-12-26 07:46:23
【问题描述】:

我想在我的后端(MSQL Server 和 Django)中进行查询并将其转换为数据透视表。我更喜欢用 SQL 而不是 Python(我无法安装 Pandas)。 你能帮忙吗?我发现的所有东西都是数值。如果在 SQL 中无法做到这一点,那么关于在 Python 中转换它的帮助也将不胜感激。谢谢

我的数据:

我想要这个:

【问题讨论】:

  • @IanKenney 谢谢伊恩,但它是用于数值的。正确的?我的是一个标志,我不确定应该使用哪个聚合函数
  • 数据类型与任何东西无关。枢轴仍然是枢轴。
  • 您应该仍然可以使用 min 或 max 之类的聚合

标签: sql-server pivot pivot-table


【解决方案1】:

使用dynamic pivot 如下所示来达到预期的效果。

declare @columns varchar(max)='',@sql nvarchar(max);

SELECT @columns+=QUOTENAME(flag_type) + ',' from (select distinct flag_type from 
YourTableName) t
SET @columns = LEFT(@columns, LEN(@columns) - 1);

set @sql='
SELECT *  FROM   
(
select items_col,flag_type,flag_value from YourTableName
) t 
PIVOT(Max(flag_value)
FOR flag_type IN ('+@columns+')
) AS pivot_table
'

EXEC (@Sql)

【讨论】:

    【解决方案2】:

    你可以试试这个:

    https://github.com/pivot-my-stuff/easy_pivot

    我在“示例”文件夹中创建了一个 SQL 文件,用于透视您的数据。这可能只会输出到您的 SQL Server Management Studio 显示,因为动态查询作为子进程运行。听起来您需要对返回的数据进行更多自动化。但我提供它以防你觉得它有用。

    但是...您可以运行带有标志的 Easy Pivot 以输出 SQL 代码:

    声明@generate_source_code_only AS BIT = 1

    如果您期望没有新的标志类型,那么您可能可以修改它生成的 SQL 代码并使用它自动执行。您只需要更改此代码的 FROM 部分中的临时表,以匹配保存预透视数据的实际表的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 2017-11-25
      • 2012-02-22
      相关资源
      最近更新 更多