sql - 使用转置执行查找的 SQL 查询
问题描述
我想实现以下目标,老实说,我什至不知道从哪里开始。我们有两个表,客户和订单。我需要创建第三个表,该表将包含组合数据,并以水平方式显示。
这些是当前表格:
顾客:
Id Email Language
Customer1 1 cust1@email.com en
Customer2 2 cust2@email.com sp
Customer3 3 cust3@email.com ru
订单:
Id CustomerId Total
a 1 200
b 1 300
c 2 400
d 3 500
e 3 500
f 3 500
g 3 500
和期望的结果:
CustomerID Email Language Order1 Order2 Order3 Order4 Order5 Order6
1 a b - - - -
2 c - - - - -
3 d e f g - -
每个客户最多可以有 6 个活动订单,但逻辑也可以是每个客户只列出 6 个第一个订单。有关如何实现此结果的任何建议?对你的帮助表示感谢。
解决方案
SQL 表代表无序表。除非列指定ordering ,否则没有ordering 。让我假设它id
扮演了这个角色。
然后,您可以使用条件聚合来执行此操作:
select c.id, c.email, c.language,
max(case when seqnum = 1 then o.id end) as order_1,
max(case when seqnum = 2 then o.id end) as order_2,
max(case when seqnum = 3 then o.id end) as order_3,
max(case when seqnum = 4 then o.id end) as order_4,
max(case when seqnum = 5 then o.id end) as order_5,
max(case when seqnum = 6 then o.id end) as order_6
from customers c left join
(select o.*,
row_number() over (partition by customerid order by id) as seqnum
from orders o
) o
on c.customerid = o.customerid
group by c.id, c.email, c.language;
推荐阅读
- reactjs - 有没有更好的方法来有条件地在 FE 上呈现这些 BE 响应?使用反应
- jenkins - 全局变量不能在 Jenkinsfile 的函数内使用
- c++ - 类链表类的析构函数的双重释放错误
- c# - Visual Studio 安装项目 .NET5 运行时下载失败
- android-studio - 如何在默认操作系统驱动器以外的驱动器上完全安装 Windows 10 上的 Android Studio?
- python - 关于python中的链表
- python - Jupyter notebook 不会运行带有模糊模糊功能的模糊匹配单元
- python - 如何使用多处理解析文本文件并返回 url
- javascript - 我的内部 Javascript 代码不起作用
- r - 如何删除df2中存在的df1中的行?