Bigquery 中的动态 UnPivot

2024-04-19

我想使用 bigquery 脚本动态地将列反转为行。 我正在尝试复制我们所拥有的here https://towardsdatascience.com/pivot-in-bigquery-4eefde28b3be但使用 upivot 运算符。

The table looks like this enter image description here

我想把它改成这样。

我正在使用这个 sql 脚本,但它没有在 bigquery 中提供所需的输出。请协助。

    DECLARE myunpivot STRING;
SET myunpivot = (
  SELECT CONCAT('("', STRING_AGG(DISTINCT column_name, '", "'), '")'),
From(
SELECT column_name FROM Project_Health.INFORMATION_SCHEMA.COLUMNS
where table_name ="FY22_Operational_PH_Calc_Summary" 
and column_name not in("Subject")));

EXECUTE IMMEDIATE format("""
SELECT * FROM
(
  SELECT * FROM Project_Health.FY22_Operational_PH_Calc_Summary`
)
unpivot
(
  Rating 
  FOR Period in %s
)
""", myunpivot);

When this is run I get enter image description here

我在第一份 10MB 工作中得到的结果是

("Jan_Baseline_thresholds", "Week_1", "Week_2", "Week_3", "Week_4", "Jan_Avg", "Feb_Baseline_thresholds", "Week_5", "Week_6", "Week_7", "Week_8", "Feb_Avg", "Mar_Baseline_thresholds", "Week_9", "Week_10", "Week_11", "Week_12", "Week_13", "Week_14", "Week_15", "Week_16", "Week_17", "Week_18", "Week_19", "Week_20", "Week_21", "Week_22", "Week_23", "Week_24", "Week_25", "Week_26", "Week_27", "Week_28", "Week_29", "Week_30", "Week_31", "Week_32", "Week_33", "Week_34", "Week_35", "Week_36", "Week_37", "Week_38", "Week_39", "Week_40", "Week_41", "Week_42", "Week_43", "Week_44", "Week_45", "Week_46", "Week_47", "Week_48", "Week_49", "Week_50", "Week_51", "Week_52")

虽然我从第二份工作得到的结果是

SELECT * FROM
(
  SELECT * FROM Project_Health.FY22_Operational_PH_Calc_Summary`
)
unpivot
(
  Rating 
  FOR Period in ("Jan_Baseline_thresholds", "Week_1", "Week_2", "Week_3", "Week_4", "Jan_Avg", "Feb_Baseline_thresholds", "Week_5", "Week_6", "Week_7", "Week_8", "Feb_Avg", "Mar_Baseline_thresholds", "Week_9", "Week_10", "Week_11", "Week_12", "Week_13", "Week_14", "Week_15", "Week_16", "Week_17", "Week_18", "Week_19", "Week_20", "Week_21", "Week_22", "Week_23", "Week_24", "Week_25", "Week_26", "Week_27", "Week_28", "Week_29", "Week_30", "Week_31", "Week_32", "Week_33", "Week_34", "Week_35", "Week_36", "Week_37", "Week_38", "Week_39", "Week_40", "Week_41", "Week_42", "Week_43", "Week_44", "Week_45", "Week_46", "Week_47", "Week_48", "Week_49", "Week_50", "Week_51", "Week_52")
)  
 

我找到了解决方案,问题是连接线

CONCAT('("', STRING_AGG(DISTINCT column_name, '", "'), '")'),

替换为

CONCAT('(', STRING_AGG( column_name, ','), ')'),

以下是完整的查询

DECLARE myunpivot STRING;
SET myunpivot = (
  SELECT CONCAT('(', STRING_AGG( column_name, ','), ')'),
From(
SELECT column_name FROM Project_Health.INFORMATION_SCHEMA.COLUMNS
where table_name ="FY22_Operational_PH_Calc_Summary" 
and column_name not in("Subject")));

EXECUTE IMMEDIATE format("""
SELECT * FROM
(
  SELECT * FROM Project_Health.FY22_Operational_PH_Calc_Summary`
)
unpivot
(
  Rating 
  FOR Period in %s
)
""", myunpivot);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bigquery 中的动态 UnPivot 的相关文章

  • 如何比较行内的重叠值?

    我似乎对这个 SQL 查询有问题 SELECT FROM appts WHERE timeStart gt timeStart AND timeEnd lt timeEnd AND dayappt boatdate 时间格式为军用时间 物流
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 创建日期范围表

    我正在编写一份需要显示每天值的报告 我有查询的开始日期和结束日期 但我希望避免丢失日期 以防表不包含特定日期的值 我正在考虑创建一个基本日期范围表 其中包含开始和结束之间的所有日期 然后将其与数据表左连接以显示每一天的值 我找到了一些适用于
  • SQL 约束最小值/最大值?

    有没有办法为数字字段设置 SQL 约束 最小值应为 1234 最大值应为 4523 SQL Server 语法为the check约束 http technet microsoft com en us library ms179491 as
  • ORA-00933 与内部联接和“as”混淆

    我有一个使用以下命令从两个表中获取数据的查询inner join 但我收到错误SQL command not properly ended as 下面有一个星号 select P carrier id O order id O aircra
  • 我应该使用平面表还是标准化数据库?

    我目前正在开发一个使用 MySQL 数据库作为后端的 Web 应用程序 在继续下一步之前 我需要知道什么更适合我的情况 简而言之 在这个应用程序中 用户将能够使用任何数字字段 他们决定 构建自己的表单 现在我将其全部存储在通过外键链接的几个
  • 使用条件 SQL 统计每月汇总记录

    我有一张桌子 我们就叫他们桌子吧SUMMARYDATA NIP NAME DEPARTMENT STATUSIN STATUSOUT TOTALLOSTTIME A1 ARIA BB 2020 01 21 08 06 23 2020 01
  • 删除表的重复项

    In my activity logs 它包含列 material name user id mod result 这标志着测试是否通过 失败 cert links 不知何故 用户生成了两倍的条目material name与cert lin
  • 如何在 Spring Data 中选择不同的结果

    我在使用简单的 Spring Data 查询或 Query 或 QueryDSL 在 Spring Data 中构建查询时遇到问题 如何选择三列 研究 国家 登录 不同的行 并且查询结果将是用户对象类型的列表 Table User Id S
  • 使用 .NET 中的类型化数据集将 SQL 参数传递给 IN() 子句

    首先道歉 因为该网站上有类似的问题 但没有一个直接回答这个问题 我在 VS 2010 中使用类型化数据集 我在数据集中创建一个 TableAdapter 查询如下 SELECT from Table WHERE ID IN IDs 现在如果
  • 如何引用下一行的数据?

    我正在 PostgreSQL 9 2 中编写一个函数 对于股票价格和日期的表 我想计算每个条目较前一天的百分比变化 对于最早一天的数据 不会有前一天 因此该条目可以简单地为 Nil 我知道WITH声明可能不应该高于IF陈述 到目前为止 这就
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • 自动删除主键序列中的间隙

    我正在创建一个网页 该网页根据用户操作将数据存储到 MySQL 数据库中 数据库有很多行 行的主键是列 rowID 它只是按顺序对行进行编号 例如 1 2 3 4 用户可以选择删除行 问题是当用户删除最后一行以外的行时 rowID 中有一个
  • hive sql查找最新记录

    该表是 create table test id string name string age string modified string 像这样的数据 id name age modifed 1 a 10 2011 11 11 11 1
  • 没有为 1 个或多个必需参数给出值。更新SQL

    我正在编写一个程序 当用户在列表视图上选择记录时 该程序会更新密码或积分 我收到错误 没有为 1 个或多个必需参数给出值 我不知道如何纠正 我是否遗漏了一些明显的东西 Dim sql As String UPDATE Users SET P
  • Bigquery 中数组对之间的余弦相似度

    我创建了一个表 其中有一对 ID 和每个 ID 的坐标 以便我可以计算它们之间的成对余弦相似度 The table looks like this 坐标的维度数当前为 128 但可能会有所不同 但同一个表中一对 ID 的数字维度始终相同 c
  • 3 个表的 SQL 查询(或联接)

    第一次在 Stack Overflow 上问问题 很棒的资源 但是只有一件事真正让我作为 SQL 新手感到困惑 我有三个表 我想获取与鲍勃的学生相关的所有导师的姓名 表 1 教师 ID Name 1 Bob 表 2 学生 STUDENT I
  • H2 SQL 日期比较

    在 H2 数据库中 如何在 TIMESTAMP 类型的列上运行查询 SELECT FROM RECORDS WHERE TRAN DATE lt 2012 07 24 Try 2012 07 24
  • SQL Server:为什么 ISO-8601 格式的日期依赖于语言?

    我需要一些帮助来理解 SQL Server 中的日期格式处理 如果您尝试以下操作 它将返回正确的结果 SET LANGUAGE English SELECT CAST 2013 08 15 AS DATETIME 2013 08 15 00
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ

随机推荐