I have the following table data:
| name |items | -------------------- | Bob |1, 2, 3 | | Rick |5, 3, 8, 4| | Bill |2, 4 |
I need to create a table with a split items column, but with the limitation to have at most N items per name. E.g. for N = 3 the table should look like this:
|name |item| ----------- |Bob |1 | |Bob |2 | |Bob |3 | |Rick |5 | |Rick |3 | |Rick |8 | |Bill |2 | |Bill |4 |
I have the following query that splits items correctly, but doesn’t account for the maximum number N. What should I modify in the query (standard SQL, BigQuery) to account for N?
WITH data_split AS ( SELECT name, SPLIT(items,',') AS item FROM ( SELECT name, items -- A lot of additional logic here FROM data ) ) SELECT name, item FROM data_split CROSS JOIN UNNEST(data_split.item) AS item
Advertisement
Answer
Consider below approach (BigQuery)
select name, trim(item) item from your_table, unnest(split(items)) item with offset where offset < 3
if applied to sample data in your question – output is