首页 > 解决方案 > 如何将两个不同表中的唯一 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 函数?

标签: sqlhive

解决方案


假设 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

推荐阅读