带有重复变量的sql pivot

时间:2017-12-22 23:00:20

标签: sql google-bigquery pivot

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

publication_number |受让人

US-6044964-A | Sony Corporation

| Digital Audio Disc Corporation

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

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

publication_number |受让人1 | assignee2

US-6044964-A | Sony Corporation | Digital Audio Disc 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的内容类似。但是,我没有像该示例中那样拥有每行的标识符。

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

1 个答案:

答案 0 :(得分:2)

下面是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