联接类型和预期输出

Types of joins and expected output

提问人:ppdalal 提问时间:10/3/2022 最后编辑:ppdalal 更新时间:10/3/2022 访问量:76

问:

我有一个包含批发数据和零售数据的表。 数据的结构为

渠道 串行# 日期
WS-构建 12345 1/1/2019
WS-经销商 34567 1/5/2021
零售 12345 1/1/2020
零售 34567 3/5/2021

我希望输出与串行匹配#

每个序列号 # 将在表中出现两次。我正在尝试通过建筑商或经销商销售的单位数 #。

串行# 渠道 批发日期 零售日期
12345 WS-构建 1/1/2019 1/1/2020
34567 WS-经销商 1/5/2021 3/5/2021

我怎样才能通过加入同一张桌子来实现这一目标?

SQL 联接 匹配 多条记录

评论

0赞 nbk 10/3/2022
为什么第二个序列号 34569 与第一个序列号 34567 不同?
0赞 ppdalal 10/3/2022
修好了,好抓

答:

0赞 SwaD 10/3/2022 #1

尝试通过串行和通道加入

select t1.serial#, t2.WholesaleDate, t2."Retail Date", (*) from table1 t1
join table2 t2 on t1.serial# = t2.serial# and t1.channel = t2.channel
group by t1.serial#, , t2.WholesaleDate, t2."Retail Date";

评论

0赞 odaiwa 10/3/2022
您的查询将不适用于此示例,因为如果您看到预期的输出,它与原始表不同,则还需要一列
0赞 ppdalal 10/3/2022
如果序列匹配,如何进行计数?
0赞 SwaD 10/3/2022
你应该具备什么样的条件?序列号和频道?还是别的什么?
0赞 ppdalal 10/3/2022
使用相同的表 1 创建预期的输出。但是,在输出中,我希望看到同一序列号的批发日期和匹配的零售日期#。
0赞 ppdalal 10/3/2022
@SwaD 它需要匹配的条件是首先找到数学序列 # 的 2 条记录,然后输出序列 # A 在日期 X 批发,在日期 Y 零售。我试图实现的是 X 个单位在批发建筑商中发货的年份(无论什么)与在批发经销商那里发货的 Y 单位在一年内售出(无论什么)
0赞 nbk 10/3/2022 #2

只要零售是售后,你就可以做到

但我不明白计数是从哪里来的

SELECT
 t1."Serial#",t1."Channel", t1."Date" as WholesaleDate, t2."Date" as "Retail Date"
FROM tab1 t1 JOIN tab1 t2 ON t1."Serial#" = t2."Serial#" AND t1."Date" < t2."Date"

串行# 渠道 批发日期 零售日期
12345 WS-构建 2019-01-01 00:00:00 2020-01-01 00:00:00
34567 WS-经销商 2021-05-01 00:00:00 2021-05-03 00:00:00
SELECT 2

小提琴