【问题标题】:Join 2 tables by order按顺序加入 2 个表
【发布时间】:2021-10-19 21:26:02
【问题描述】:

这是在 SQL Server 中。我在下面有两个表:

表 A

EVENTID  CID    QID
-----------------------
1953     4104   Q900068
1954     4104   Q900068
1955     4104   Q900068

表 B

EVENTID   CID     IRR
----------------------------
2772      5384    Q900068IRR
2773      5384    Q900068IRR
2837      5384    Q900068IRR

如何通过 SQL 获得如下结果? (最小 A.EVENTID 映射最小 B.EVENTID,最大 A.EVENTID 映射最大 B.EVENTID,中间 A.EVENTID 映射中间 B.EVENTID)。 QID 是 IRR 的子串。

1953    4104    Q900068 2772    5384    Q900068IRR
1954    4104    Q900068 2773    5384    Q900068IRR
1955    4104    Q900068 2837    5384    Q900068IRR

提前谢谢你!

【问题讨论】:

  • 所以表 A 和表 B 中的行数总是完全相同?您能否用实际的 SQL 类型进行标记(SQL Server?Oracle?MS Access?)
  • 是的。表 A 和 B 始终具有完全相同的行数。数据库服务器是 SQL SERVER 2017。谢谢!
  • 根据问题指南,请展示您尝试过的内容并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。并请以 DDL+DML 格式提供您的示例数据,以方便使用。

标签: sql sql-server tsql join


【解决方案1】:

你可以试试这个:

   SELECT A.EVENTID,A.CID,A.QID,B.EVENTID,B.CID,B.IRR FROM 
    (
        SELECT ROW_NUMBER() OVER(ORDER BY EVENTID ASC) ROWNO,EVENTID,CID,QID 
        FROM A
    )A
    JOIN
    (
        SELECT ROW_NUMBER() OVER(ORDER BY EVENTID ASC) ROWNO,EVENTID,CID,IRR 
        FROM B
    )B ON A.ROWNO=B.ROWNO

【讨论】:

  • 这是正确的,因为我们使用行号之类的列来匹配每个表 1:1
  • 非常感谢 Atique Rahman!你的解决方案很棒!关于如何使用 row_number 的一堂好课。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2021-12-23
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多