【问题标题】:SQL query - Select multiple results as a column fieldSQL 查询 - 选择多个结果作为列字段
【发布时间】:2021-11-12 05:45:40
【问题描述】:

我有一个名为 ma​​in 的表:

  t_pdno              t_mitm
SFC093989   SLS005251ACL-3382012763-1
SFC093991   SLS005251ACL-3382012765-1
SFC093996   SLS005251ACL-3382014708-1
SFC093993   SLS005251ACL-3382014709-1

我有另一个名为 brach 的表:

          t_mitm           t_opno
SLS005251ACL-3382012763-1   10
SLS005251ACL-3382012763-1   20
SLS005251ACL-3382012763-1   30
SLS005251ACL-3382012763-1   40
SLS005251ACL-3382014708-1   50
SLS005251ACL-3382014708-1   80
SLS005251ACL-3382014708-1   30
SLS005251ACL-3382014708-1   40

你可以看到重复字段是t_mitmMain.t_mitm 是独一无二的。但是对于每个 t_mitmbranch 表中都有多行。

是否可以从 ma​​in 中选择所有行并显示名为 Options 的附加列,其中显示每个 t_mitm 记录的所有 t_opno .换句话说,基于提供的数据的最终结果应该是:

  t_pdno              t_mitm            Options
SFC093989   SLS005251ACL-3382012763-1   10,20,30,40
SFC093991   SLS005251ACL-3382012765-1    
SFC093996   SLS005251ACL-3382014708-1   50,80,30,40
SFC093993   SLS005251ACL-3382014709-1    

我做了一个 SQL 小提琴:

http://sqlfiddle.com/#!18/dd5661

【问题讨论】:

  • 只是一个提示,让帮助你变得容易。 A、B、C 等示例数据比 SLS005351ACL-3382012763-1、SLS005251ACL-3382017763-1、SLS006251ACL-3382014763-1 等更容易阅读。
  • 您已经标记了 Mysql 并且您的小提琴是 SQLServer ?请告诉我们您使用什么数据库?

标签: sql join select


【解决方案1】:

你必须使用join和group concat

Select a.t_pdno, a.t_mitm, group_concat(b.t_opno)
from main a inner join branch b on a.t_mitm =b.t_mitm
group by a.t_mitm

如果我使用手机,请更正任何错字

【讨论】:

    【解决方案2】:

    如果数据库是 MS SQLServer,那么这就是您需要的查询:

    select a.t_pdno, a.t_mitm, STRING_AGG (b.t_opno, ',')
    from main a 
    left join branch b on a.t_mitm =b.t_mitm
    group by a.t_pdno, a.t_mitm
    

    您需要使用左连接从第一个表中获取所有选项,即使它们在第二个表中没有匹配的数据。

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 2011-01-21
      • 2021-12-18
      • 2010-09-20
      相关资源
      最近更新 更多