Sql 行值到列,列名称到值bigquery
我正在尝试创建一个包含两列“tags”和“cnt”的新表 “标记”将包含列名称作为值 “cnt”包含每个原点列的值Sql 行值到列,列名称到值bigquery,sql,regex,google-bigquery,pivot,Sql,Regex,Google Bigquery,Pivot,我正在尝试创建一个包含两列“tags”和“cnt”的新表 “标记”将包含列名称作为值 “cnt”包含每个原点列的值 您可以使用数组取消IVOT: select el.which, el.cnt from t cross join (unnest([struct('ALL_CLOSE' as which, t.all_close as cnt), struct('ALL_OPEN' as which, t.all_open as cnt),
您可以使用数组取消IVOT:
select el.which, el.cnt
from t cross join
(unnest([struct('ALL_CLOSE' as which, t.all_close as cnt),
struct('ALL_OPEN' as which, t.all_open as cnt),
. . .
])) u(el)
下面是BigQuery标准SQL
#standardSQL
SELECT
TRIM(SPLIT(kv, ':')[OFFSET(0)], '"') tag,
SPLIT(kv, ':')[SAFE_OFFSET(1)] cnt
FROM `project.dataset.table` t,
UNNEST(REGEXP_EXTRACT_ALL(TRIM(TO_JSON_STRING(t), '{}'), r'(.*?)(?:,|$)')) kv
您可以使用问题中的样本数据测试、播放上述内容,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT 8279 all_close, 4 all_open, 1504 only_o, 16785 only_f
)
SELECT
TRIM(SPLIT(kv, ':')[OFFSET(0)], '"') tag,
SPLIT(kv, ':')[SAFE_OFFSET(1)] cnt
FROM `project.dataset.table` t,
UNNEST(REGEXP_EXTRACT_ALL(TRIM(TO_JSON_STRING(t), '{}'), r'(.*?)(?:,|$)')) kv
结果
Row tag cnt
1 all_close 8279
2 all_open 4
3 only_o 1504
4 only_f 16785