如何将值从列转换为行

问题描述 投票:0回答:1
订单号 客户姓名 电子邮件地址 产品 1 - 品牌 产品 1 - 描述 产品 1 - 价格 产品 2 - 品牌 产品 2 - 描述 产品 2 - 价格
123 约翰·史密斯 [电子邮件受保护] 承运人 变频空调 599
456 简·史密斯 [电子邮件受保护] 联想 ThinkVision 监视器 149 罗技 人体工学鼠标 79

嗨,我正在使用这种表/数据集来记录客户的购买记录,但他们购买的所有产品都包含在一行中。该表有 10 组这些产品品牌、产品描述、产品价格等,但我希望发生的是 从该单行中获取单独的购买信息,并使用剩余产品的详细信息创建后续行,同时仍然具有客户信息。在某些情况下,客户只会得到一件商品,因此其余列将为空。表末尾还有其他列,其中包含商品的总成本、送货地址等,我也想将其保留在将创建的新行中。

我想要实现的是这样的:

订单号 客户ID 电子邮件地址 产品-品牌 产品 - 描述 产品 - 价格
123 约翰·史密斯 [电子邮件受保护] 承运人 变频空调 599
456 简·史密斯 [电子邮件受保护] 联想 ThinkVision 监视器 149
456 简·史密斯 [电子邮件受保护] 罗技 人体工学鼠标 79

我使用 BigQuery 一段时间了,但我只知道基本功能,所以我不确定如何去做,因为这看起来很复杂。我知道 Google Sheet 中有一个类似的功能,您可以在其中转置单元格,但这只能解决我的问题的一半。任何帮助/建议将不胜感激,谢谢!

sql google-bigquery transpose
1个回答
0
投票

您可以使用 UNON ALL 组合多个查询的结果集。 我没有大查询,因此无法测试,但大查询的语法应该完全相同。

小提琴

SELECT 
    OrderID,
    CustomerName,
    EmailAddress,
    Product1_Brand AS Product_Brand,
    Product1_Description AS Product_Description,
    Product1_Price AS Product_Price
FROM CustomerPurchases
WHERE Product1_Brand IS NOT NULL

UNION ALL

SELECT 
    OrderID,
    CustomerName,
    EmailAddress,
    Product2_Brand AS Product_Brand,
    Product2_Description AS Product_Description,
    Product2_Price AS Product_Price
FROM CustomerPurchases
WHERE Product2_Brand IS NOT NULL
ORDER BY OrderID;

输出

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.