【发布时间】:2021-11-10 08:01:15
【问题描述】:
示例表
| NUMBER | DEAL_NUMBER | NAME1 | NAME2 |
|---|---|---|---|
| 1 | T01 | TOM | JERRY |
| 2 | T02 | LEBRON | STEVEN |
希望输出如下:
| NUMBER | DEAL_NUMBER | NAME1 | NAME2 | Name_COM |
|---|---|---|---|---|
| 1 | T01 | TOM | JERRY | LEBRON TOM STEVEN JERRY |
| 2 | T02 | LEBRON | STEVEN | LEBRON TOM STEVEN JERRY |
使用string_agg函数可以解决,但不够方便。
CREATE TEMP FUNCTION EXCHANGE_PLACE(STR STRING)
RETURNS STRING
AS
((
SELECT ARRAY_TO_STRING(array_reverse(ARRAY_LIST),' ') FROM (SELECT SPLIT(STR,' ')ARRAY_LIST)
));
WITH TBL_D_CUSTOMER AS
(
SELECT "1" AS NUMBER,"T01" AS DEAL_NUMBER,"TOM" AS NAME1, "JERRY" AS NAME2 UNION ALL
SELECT "2","T01","LEBRON","STEVEN"
)
SELECT
*,
EXCHANGE_PLACE(STRING_AGG(NAME1,' ')OVER(PARTITION BY DEAL_NUMBER)) || ' ' || EXCHANGE_PLACE(STRING_AGG(NAME2,' ')OVER(PARTITION BY DEAL_NUMBER)) AS NAME_COM
FROM TBL_D_CUSTOMER
有什么方法可以做得更好吗?
【问题讨论】:
-
请澄清 1)
Name_COM背后的逻辑 - 你希望它如何组装 2) 为什么string_agg对你来说不够方便 - 请澄清以便我们可以进一步帮助你:o) -
1) 这里显示了编辑后的样本和目标输出,可能显示了组装的逻辑 2) 这里创建了额外的临时函数来解决或使用子查询,是否可以用更少的时间实现相同的结果查询?
标签: google-bigquery bigquery-udf