我将以下表结构导入Microsoft Power BI:
如何拆分列ItemID
和Quantity
,以便用逗号分隔的值对应,例如
该表存储在Google BigQuery数据库中,因此如果我的问题可以通过(标准)SQL查询解决,我也很高兴知道这一点。
答案 0 :(得分:0)
如果您对SQL答案感到满意,那么PIVOT TABLES就是您的选择。
它们是将行转换为列的好方法,而且比对同一个表执行多个连接要麻烦得多。
一旦你知道要搜索什么,我就不会在这里发布完整版本,因为它已经有详细记录。
祝你好运。答案 1 :(得分:0)
以下是BigQuery Standard SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT '1' TransactionID, '1,2,3' ItemID, '1,1,1' Quantity, 6500 revenue UNION ALL
SELECT '2', '1,3', '1,2', 4000 UNION ALL
SELECT '3', '1,2', '', 3000
)
SELECT TransactionID, ItemID, Quantity, revenue
FROM `project.dataset.table`,
UNNEST(SPLIT(ItemId)) AS ItemID WITH OFFSET pos1,
UNNEST(SPLIT(Quantity)) AS Quantity WITH OFFSET pos2
WHERE pos1 = pos2 OR Quantity = ''
ORDER BY TransactionID
输出为
TransactionID ItemID Quantity revenue
1 1 1 6500
1 2 1 6500
1 3 1 6500
2 1 1 4000
2 3 2 4000
3 1 3000
3 2 3000
只需一个方向,您需要调整此项以处理案例,例如当项目数量与数量数量不对应时等。
例如,如下所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT '1' TransactionID, '1,2,3' ItemID, '1,11,111' Quantity, 6500 revenue UNION ALL
SELECT '2', '1,3', '1111', 4000 UNION ALL
SELECT '3', '1,2', '', 3000
)
SELECT
TransactionID, ItemID,
IFNULL((SELECT q
FROM UNNEST(SPLIT(Quantity)) AS q WITH OFFSET pos2
WHERE pos2 = pos
), '') Quantity,
revenue
FROM (
SELECT TransactionID, ItemID, Quantity, revenue , pos
FROM `project.dataset.table`,
UNNEST(SPLIT(ItemId)) AS ItemID WITH OFFSET pos
)
ORDER BY TransactionID, pos