带有重复变量的sql pivot

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有重复变量的sql pivot相关的知识,希望对你有一定的参考价值。

我是SQL新手并使用Google BigQuery。我有一个表有一条记录,如下所示:

publication_number |代理人

US-6044964-A | Sony Corporation

|数字音频光盘公司

标识符publication_number仅列出一次;第一个受理人与publication_number出现在同一行,第二个受体显示为没有标识符的附加行。

我想要做的是创建一个如下表:

publication_number |受让人1 | assignee2

US-6044964-A | Sony Corporation |数字音频光盘公司

如果附加受让人出现在另一栏中。

我有谷歌的专利 - 公共数据称为“重复”变量。我在BigQuery中尝试了以下查询:

SELECT pvt.publication_number, pvt.[1] as assignee1, pvt.[2] as assignee2
FROM `main_tables.main_table5` 
PIVTO (
   MAX(assignee)
   FOR publication_number IN([1],[2])
) as pvt

我收到以下错误:

语法错误:[2:36]意外的“[”。如果这是表标识符,请使用, e.g.table.name`而不是[table.name]来转义名称

我找到了以下问题/回复,它使用pivot here执行类似于我想要的操作。但是,我没有每个行的标识符,如该示例中所示。

如何为第二受让人创建另一列?

答案

下面是BigQuery Standard SQL,应该给你一个想法

#standardSQL
SELECT 
  publication_number, 
  assignee[SAFE_OFFSET(0)] assignee1,
  assignee[SAFE_OFFSET(1)] assignee2,
  assignee[SAFE_OFFSET(2)] assignee3,
  assignee[SAFE_OFFSET(3)] assignee4
FROM `yourproject.yourdataset.yourtable`   

您可以使用以下虚拟数据测试/播放它

#standardSQL
WITH `yourproject.yourdataset.yourtable` AS (
  SELECT 'US-6044964-A' publication_number , ['Sony Corporation', 'Digital Audio Disc Corporation'] assignee UNION ALL
  SELECT 'ABC', ['xyz', 'abc', 'uvw']
)
SELECT 
  publication_number, 
  assignee[SAFE_OFFSET(0)] assignee1,
  assignee[SAFE_OFFSET(1)] assignee2,
  assignee[SAFE_OFFSET(2)] assignee3,
  assignee[SAFE_OFFSET(3)] assignee4
FROM `yourproject.yourdataset.yourtable`   

结果是

publication_number  assignee1           assignee2                       assignee3   assignee4    
US-6044964-A        Sony Corporation    Digital Audio Disc Corporation  null        null     
ABC                 xyz                 abc                             uvw null     

以上是关于带有重复变量的sql pivot的主要内容,如果未能解决你的问题,请参考以下文章

带有 MIN() 和多列的 SQL PIVOT 表

带有子查询的SQL Pivot

带有 IN CLAUSE 动态值的 SQL Pivot

SQL Server - Pivot 将行转换为列(带有额外的行数据)

Oracle SQL group by 查询,一种 PIVOT [重复]

如何使用Android片段管理器传递变量[重复]