sql - 如何将两个不同表中的唯一 SQL 值拉入一列?
问题描述
我有两个表,每个表都有不明确的 ID、产品和销售日期。我想要一个组合表,其中行是不同的 ID,列是每个产品的最早销售日期。
这些表如下所示:
表格1
会员ID | 产品 | 销售日期 |
---|---|---|
1 | 一个 | 2021 年 1 月 1 日 |
1 | 一个 | 2021 年 2 月 1 日 |
2 | 一个 | 2021 年 1 月 1 日 |
3 | 一个 | 2021 年 2 月 2 日 |
表_2
会员ID | 产品 | 销售日期 |
---|---|---|
1 | 乙 | 2021 年 4 月 1 日 |
1 | 乙 | 2021 年 5 月 1 日 |
2 | 乙 | 2021 年 4 月 1 日 |
3 | 乙 | 2021 年 3 月 1 日 |
我想要的茶几是:
合并表
会员ID | Product_A_earliest_date | Product_B_earliest_date |
---|---|---|
1 | 2021 年 1 月 1 日 | 2021 年 4 月 1 日 |
2 | 2021 年 1 月 1 日 | 2021 年 4 月 1 日 |
3 | 2021 年 2 月 1 日 | 2021 年 3 月 1 日 |
我尝试了以下代码来合并表:
create table merged_table as
select member_id, min(a.sales_date) as Product_A_earliest_date, min(b.sales_date) as Product_B_earliest_date from(
select member_id from table_1 as a
UNION
select member_id from table_2 as b);
但这提供了“在 EOF 处丢失”错误。我是否错误地使用了 UNION 函数?
解决方案
假设 sql server 或其他支持 ctes 的引擎...
第一个挑战是获取所有 id...不可能每个销售人员都同时销售这两种产品
一旦你有了它,它就相当简单了。我没有对此进行测试,但这就是方法。
;with ids as ( select distinct member_Id from table_1
union
select distinct member_id from table_2
)
, uniqueIds as ( select distinct member_id from ids)
;with t1 as ( select member_id, product, min(sales_date) [sales_date]
from Table_1
group by member_id,product)
, t2 as ( select member_id, product, min(sales_date) [sales_date]
from Table_2
group by member_id,product)
select ui.member_Id, t1.salesDate [EarlyDate_a], t2.salesDate [earlydate_b]
from uniqueIds ui
left join t1_ on ui.memberId = t1.memberId
left join t2_ on ui.memberId = t2.memberId
推荐阅读
- java - JPA中成员实体的继承问题
- android - 如何从 Android APP 中的 Firebase 动态链接 (FDL) 读取查询参数
- python - Python,无法导入烧瓶-restplus
- visual-studio - 插入制表符而不是空格
- c# - C# 序列化 JSON 对象无法映射到 POST 的目标字段
- sql - 如何在没有重复数据的情况下对两个具有连接的表求和?
- c# - 这个 C# 字典初始化如何正确?
- angular - Cordova & Ionic 4 未找到“FBSDKCoreKit/FBSDKCoreKit.h”文件
- flutter - setState() 在 statefulWidget 类中无法识别
- javascript - 什么会导出 JavaScript/Node.JS 文件?