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 的相关文章

  • 如何找到多个列中的最小值

    我在我的 DB 3 col 中有一个值 我想在所有这些值中找到一个值 如下所述 表名 MyTable id col1 col2 col3 1 200 300 400 2 100 150 300 3 800 102 20 4 80 80 0
  • 如何在mysql中选择具有相同值集的列?

    我的桌子是 patients pid name city disease did dname has disease did pid 我想列出具有相同疾病组的患者 pid 和 did 分别是患者和疾病表中的主键 并且是 has diseas
  • MySQL - 从临时表插入

    这看起来非常简单 但我坚持使用简单的插入语句 见下文 begin work CREATE TEMPORARY TABLE IF NOT EXISTS insert table AS select r resource id fr file
  • 我怎样才能知道oracle 9i中哪些值是数字

    我有这个包含 varchar 的数据库 我想知道哪些记录保存数值 我试过REGEXP COUNT和其他 但我在 9i 上运行 我认为这是针对 10g gt 我怎样才能实现这个目标 I tried select to number my co
  • 在 PL/SQL 中将绑定变量与动态 SELECT INTO 子句结合使用

    我有一个关于 PL SQL 中的动态 SQL 语句中可以使用绑定变量的问题 例如 我知道这是有效的 CREATE OR REPLACE FUNCTION get num of employees p loc VARCHAR2 p job V
  • 有没有办法阻止 SQL Express 2008 空闲?

    我使用 SQL Express 2008 作为 Web 应用程序的后端 问题是 Web 应用程序是在工作时间使用的 因此有时在午餐或休息时间 如果 20 分钟内没有用户登录 SQL Express 将进入空闲状态模式并释放其缓存 我知道这一
  • 使用 TABLE_DATE_RANGE 时如何获取表名称

    我想使用 TABLE DATE RANGE 获取每日统计信息 如下所示 Select count tableName FROM TABLE DATE RANGE appengine logs appengine googleapis com
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • 检查两个“select”是否相等

    有没有办法检查两个 非平凡的 选择是否等效 最初我希望两个选择之间有形式上的等价 但是答案在证明 sql 查询等价性 https stackoverflow com questions 56895 proving sql query equ
  • BigQuery 如何获取 JSON 结构中的值的总和?

    我有以下查询 SELECT JSON EXTRACT json Weights as weight from select Weights blue 1 0 purple 0 0 yellow 1 0 green 1 0 as json 返
  • Reporting Services 在哪里存储其日志文件

    最相关的谷歌结果似乎表明 为了访问日志 我们必须将您自己的日志表部署到数据库并制作报告服务写入它 http technet microsoft com en us library ms157403 aspx 简而言之 Reporting S
  • 如何通过子 POJO 的属性过滤复合 ManyToMany POJO?

    我有两个像这样的房间实体 Entity public class Teacher implements Serializable PrimaryKey autoGenerate true public int id ColumnInfo n
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 使用子查询 select 创建新表

    我试图从子查询选择创建一个新表 但出现以下错误 附近的语法不正确 SELECT INTO foo FROM SELECT DATEPART MONTH a InvoiceDate as CalMonth DATEPART YEAR a In
  • 如何在 DB2 中创建返回序列值的函数?

    如何在 DB2 中创建一个从序列中获取值并返回该值的函数 应该可以在 select 或 insert 语句中使用该函数 例如 select my func from xxx insert into xxx values my func 基本
  • 数字表与递归 CTE 生成一系列数字

    为什么使用数字表比使用递归 CTE 动态生成它们要快得多 在我的机器上 给定一张桌子numbers单列n 主键 包含从1到100000的数字 查询如下 select n from numbers 大约需要 400 毫秒才能完成 使用递归 C
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • 谷歌的Dremel是什么?它与 MapReduce 有什么不同?

    谷歌的 Dremel 是此处描述 http research google com pubs pub36632 html Dremel 和 Mapreduce 有什么区别 Dremel http research google com pu
  • 如何在 SQL Server 中连接

    我的数据库没有特定的列 因此我通过开关在查询中创建了一个列 我需要的是将此列与数据库中的另一列连接起来 select certificateDuration DurationType case when certificateDuratio
  • 使用加权行概率从 PostgreSQL 表中选择随机行

    输入示例 SELECT FROM test id percent 1 50 2 35 3 15 3 rows 你会如何编写这样的查询 平均 50 的时间我可以获得 id 1 的行 35 的时间 id 2 的行 15 的时间 id 3 的行

随机推荐