Sql 从值由管道分隔的列中删除重复项

Sql 从值由管道分隔的列中删除重复项,sql,string,csv,google-bigquery,Sql,String,Csv,Google Bigquery,数据如下所示- category_id category_name associated_keys 111 Books CC34DE5W|SQA7ZZ87|LM24NO3P|SQA7ZZ87 222 Office LM24NO3P|AAB12B34 444 Furniture X34YY78Z|LM24NO3P|SQA7ZZ87|SEF5C6T4|CC34DE5W|AAB

数据如下所示-

category_id   category_name    associated_keys
    111          Books         CC34DE5W|SQA7ZZ87|LM24NO3P|SQA7ZZ87
    222          Office        LM24NO3P|AAB12B34
    444         Furniture      X34YY78Z|LM24NO3P|SQA7ZZ87|SEF5C6T4|CC34DE5W|AAB12B34
    222          Office        X34YY78Z|X34YY78Z
category_id   category_name    associated_keys
    111          Books         CC34DE5W|SQA7ZZ87|LM24NO3P
    222          Office        LM24NO3P|AAB12B34
    444         Furniture      X34YY78Z|LM24NO3P|SQA7ZZ87|SEF5C6T4|CC34DE5W|AAB12B34
    222          Office        X34YY78Z
我想从关联的\u keys列中删除不同类别\u id的重复项-

category_id   category_name    associated_keys
    111          Books         CC34DE5W|SQA7ZZ87|LM24NO3P|SQA7ZZ87
    222          Office        LM24NO3P|AAB12B34
    444         Furniture      X34YY78Z|LM24NO3P|SQA7ZZ87|SEF5C6T4|CC34DE5W|AAB12B34
    222          Office        X34YY78Z|X34YY78Z
category_id   category_name    associated_keys
    111          Books         CC34DE5W|SQA7ZZ87|LM24NO3P
    222          Office        LM24NO3P|AAB12B34
    444         Furniture      X34YY78Z|LM24NO3P|SQA7ZZ87|SEF5C6T4|CC34DE5W|AAB12B34
    222          Office        X34YY78Z

不要将这些值存储为字符串!BigQuery提供数组。因此,我将向您展示如何将字符串的结果转换为数组:

with t as (
      select 111 as category_id, 'Books' as category_name, 'CC34DE5W|SQA7ZZ87|LM24NO3P|SQA7ZZ87' as associated_keys union all
      select 222, 'Office', 'LM24NO3P|AAB12B34' union all
      select 444, 'Furniture', 'X34YY78Z|LM24NO3P|SQA7ZZ87|SEF5C6T4|CC34DE5W|AAB12B34' union all
      select 222, 'Office', 'X34YY78Z|X34YY78Z'
     )
select t.* except (associated_keys),
       (select array_agg(distinct key)
        from unnest(split(t.associated_keys, '|')) key
       ) as associated_keys
from t;

如果您确实想重建字符串,可以使用
string\u agg()
,但我不建议这样做。

不要将此类值存储为字符串!BigQuery提供数组。因此,我将向您展示如何将字符串的结果转换为数组:

with t as (
      select 111 as category_id, 'Books' as category_name, 'CC34DE5W|SQA7ZZ87|LM24NO3P|SQA7ZZ87' as associated_keys union all
      select 222, 'Office', 'LM24NO3P|AAB12B34' union all
      select 444, 'Furniture', 'X34YY78Z|LM24NO3P|SQA7ZZ87|SEF5C6T4|CC34DE5W|AAB12B34' union all
      select 222, 'Office', 'X34YY78Z|X34YY78Z'
     )
select t.* except (associated_keys),
       (select array_agg(distinct key)
        from unnest(split(t.associated_keys, '|')) key
       ) as associated_keys
from t;

如果您确实想重建字符串,可以使用
string\u agg()

#standardSQL
SELECT category_id, category_name, 
  (SELECT STRING_AGG(DISTINCT key, '|') FROM UNNEST(SPLIT(associated_keys, '|')) key) associated_keys
FROM (
  SELECT category_id, category_name, STRING_AGG(associated_keys, '|') AS associated_keys
  FROM `project.dataset.data` 
  GROUP BY category_id, category_name  
)   
如果要应用于示例中的样本数据,则输出为

Row category_id category_name   associated_keys  
1   111         Books           CC34DE5W|SQA7ZZ87|LM24NO3P   
2   222         Office          LM24NO3P|AAB12B34|X34YY78Z   
3   444         Furniture       X34YY78Z|LM24NO3P|SQA7ZZ87|SEF5C6T4|CC34DE5W|AAB12B34       
如果您不想按类别\u id进行分组(如上一个问题中所示),请使用下面的选项

#standardSQL
SELECT category_id, category_name, 
  (SELECT STRING_AGG(DISTINCT key, '|') FROM UNNEST(SPLIT(associated_keys, '|')) key) associated_keys
FROM `project.dataset.data` 
有输出

Row category_id category_name   associated_keys  
1   111         Books           CC34DE5W|SQA7ZZ87|LM24NO3P   
2   222         Office          LM24NO3P|AAB12B34    
3   444         Furniture       X34YY78Z|LM24NO3P|SQA7ZZ87|SEF5C6T4|CC34DE5W|AAB12B34    
4   222         Office          X34YY78Z

下面是BigQuery标准SQL

#standardSQL
SELECT category_id, category_name, 
  (SELECT STRING_AGG(DISTINCT key, '|') FROM UNNEST(SPLIT(associated_keys, '|')) key) associated_keys
FROM (
  SELECT category_id, category_name, STRING_AGG(associated_keys, '|') AS associated_keys
  FROM `project.dataset.data` 
  GROUP BY category_id, category_name  
)   
如果要应用于示例中的样本数据,则输出为

Row category_id category_name   associated_keys  
1   111         Books           CC34DE5W|SQA7ZZ87|LM24NO3P   
2   222         Office          LM24NO3P|AAB12B34|X34YY78Z   
3   444         Furniture       X34YY78Z|LM24NO3P|SQA7ZZ87|SEF5C6T4|CC34DE5W|AAB12B34       
如果您不想按类别\u id进行分组(如上一个问题中所示),请使用下面的选项

#standardSQL
SELECT category_id, category_name, 
  (SELECT STRING_AGG(DISTINCT key, '|') FROM UNNEST(SPLIT(associated_keys, '|')) key) associated_keys
FROM `project.dataset.data` 
有输出

Row category_id category_name   associated_keys  
1   111         Books           CC34DE5W|SQA7ZZ87|LM24NO3P   
2   222         Office          LM24NO3P|AAB12B34    
3   444         Furniture       X34YY78Z|LM24NO3P|SQA7ZZ87|SEF5C6T4|CC34DE5W|AAB12B34    
4   222         Office          X34YY78Z