【问题标题】:Compare ID based on Year and collect the missing IDs根据年份比较 ID 并收集缺失的 ID
【发布时间】:2021-03-10 18:00:29
【问题描述】:

我正在尝试根据日期比较表 1 和表 2,并根据它们的生成年份收集数据。这里的问题是,我还想从表 1 中捕获不匹配的 id 以及它们与表 2 的区别。

table_1

id finace_num date_old data_IDENTITY
A 880 2020 5699
H 4580 2019 5694
X1 5903 2003 9Rt56
Y 5555 2020 99333
J1 9999 2020 33333

table_2

id address date_new
X US 2019
A US 2020
Y1 UK 2020
Y2 - 2020
A3 NA 2019
X1 - 2003
X1 - 2003

输出

Year Id count in table 1 Id count in table 2 table 1 id that is missing in table 2
2020 3 3 2
2019 1 2 2
2003 1 2 0
  • 这里有 2020 年的 3 个记录,在 table_1 和 table_2 中。由于表 1 和表 2 中只有一条记录匹配 (id: A),因此我计算缺失 id 的数量并将其添加到最后一个字段。

  • 在第二条记录中,table_1 中有 2019 条记录,table_2 中有 2 条记录。由于 table1 中的 id 与表 2 中的 id 不匹配,我将丢失的 id 即 2 的计数添加到最后一个字段中。

到目前为止我尝试的是

select table_1.date_old, 
count(table_1.id) over ( partition by table_1.date_old ) as [Id count in table 1],
count(table_2.id) over ( partition by table_1.date_old ) as [Id count in table 2]
from
table_1, table_2

在这一点上,来自开发社区的任何建议都会对我很有帮助!提前多谢了

【问题讨论】:

  • 有什么尝试?你在哪里卡住了?您需要向我们展示您的尝试。
  • 因为我的尝试甚至没有接近结果,所以我克制了发布。我已经编辑了主题以包含我现在尝试的内容。
  • 了解您如何解决问题总是有帮助的,它不仅可以阐明问题,还可以阐明您需要什么帮助。

标签: sql sql-server


【解决方案1】:

试试这个

SELECT Year = COALESCE (t1.date_old, t2.date_new)
, "Id count in table 1" = COUNT(DISTINCT t1.id) 
, "Id count in table 2" =COUNT(DISTINCT t2.id) 
, "table 1 id that is missing in table 2" = COUNT(DISTINCT CASE WHEN t2.id IS NULL THEN t1.id ELSE NULL END ) 
FROM table_1  t1
  FULL OUTER JOIN table_2 t2
    ON t1.date_old = t2.date_new
    AND t1.id = t2.id
GROUP BY COALESCE (t1.date_old, t2.date_new)

【讨论】:

  • ON t1.date_old = t2.date_new 的目的是什么?输出应该只有表 1 中的日期,我们不能匹配表 2 中的日期。
  • 两个表加入的条件。我建议您应该阅读更多关于 SQL 的内容。真诚的,:)
  • 你误会了。我的意思是我们为什么要根据日期加入。
  • 为什么不呢?我们有问题,我们会尽我们手上的任何方法来解决它。
猜你喜欢
  • 2021-04-15
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多