【问题标题】:Aggregated double join tSQL聚合双连接 SQL
【发布时间】:2021-10-08 13:35:18
【问题描述】:

我们有三个表名 case、case flow 和 note。案例到案例流关系是一对N,案例到笔记关系也是。案例流有两个字段:开始日期、结束日期。并且 Note 有一个名为 created on 的日期字段。 我们希望能够显示按案例流分组的注释(基于创建日期和开始日期、结束日期的比较),然后按案例分组。有没有办法通过 tSQL 构建这样的查询?

以下 APPEAR 是图像提供的数据(以后请不要做这样的图像)。

Case table
CaseID   CaseName
cs1       Test1
cs2       Test2

CaseFlow table
CaseFlowID  CaseID  StartDate  EndDate
cf1         cs1     7/25/2021  7/29/2021
cf2         cs2     7/26/2021  7/27/2021
cf3         cs2     7/27/2021  7/28/2021
cf4         cs2     7/28/2021  7/31/2021

Notes table
NoteID      CaseID    CreatedOn
nt1         cs1       7/25/2021
nt2         cs1       7/27/2021
nt3         cs1       7/27/2021
nt4         cs1       7/30/2021


Expected Result
Case        Flows     Notes
cs1         cf1       nt1
                      nt2
cs2         cf2       null
            cf3       nt3
                      nt4

样本数据: enter image description here

【问题讨论】:

  • 消耗品样本数据、预期结果、您的尝试都会帮助我们帮助您。你问的是什么现在完全不清楚
  • @larnu 添加了一些示例数据
  • 我们需要consumable样本数据。图像不能帮助我们帮助您。你也错过了我的其余评论;预期结果 您的次尝试。
  • 请相应阅读sql-server tag infoedit 中的指南。
  • @larnu 我不知道这个结果能不能实现!只想知道有没有可能!?如果可能的话?怎么样?

标签: sql sql-server tsql join aggregate


【解决方案1】:

除了您的图像在流量列中仅显示 1 个记录值之外,返回的数据将显示返回的每一行的重复值。您的输出格式将用于删除重复值,例如大小写和流。

您的结果总体显示了 4 个案例流,因此您获得了 4 个返回的行。首先,如果您想要案例名称(我确实包含在输出中),我正在对案例表进行 JOIN。但是转到 notes 表,这需要 LEFT JOIN。这意味着即使给定案例和创建日期的右侧(注释)没有匹配的记录,我也总是想要左侧的记录(caseFlow)。

另一个警告。您的案例开始/结束日期。您显示的值似乎允许重叠。看看您的案例 2 案例流程。你有一个来自 26-27,然后是 27-28 和 28-31。因此,如果您在 27 日进行交易,如果日期为 27 日,则无法确定它属于案例流程 2 vs 3,或者如果日期为 28 日,则属于案例流程 3 vs 4... 除非将结束日期应用为note 小于案件的结束日期。这就是为什么我有 where 子句 where created on 是在案件的开始日期或之后,但在结束日期之前。

select
      c.caseName,
      cf.caseid,
      cf.caseflowid,
      n.noteid
   from
      CashFlow cf
         JOIN Case c
            on cf.caseid = c.caseid
         LEFT JOIN Notes n
            on cf.caseid = n.caseid
            AND cf.StartDate <= n.CreatedOn
            AND n.CreatedOn < cf.EndDate

【讨论】:

  • @Pey,很高兴它对你有用,但更重要的是。解释是否让您清楚地了解为什么事情有效,而不仅仅是“这是一个答案”。也请注意我的第一个表的缩进样式,然后缩进到 JOINING TO 表,然后告诉表之间的关系是如何存在的。有助于长期了解分层相关的内容。查看我发布的几乎所有其他基于 SQL 的查询,包括许多包含自连接和在不同条件下多次连接到同一个表的查询。比模糊在一起更具可读性。
猜你喜欢
  • 2011-12-15
  • 2014-11-18
  • 2021-12-11
  • 2023-02-03
  • 2015-02-20
  • 1970-01-01
  • 2020-08-23
  • 2023-04-09
  • 2023-03-06
相关资源
最近更新 更多