SQL 查询 - Select 多个结果作为列字段

SQL query - Select multiple results as a column field

我已经 table 调用了 main:

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

我有另一个 table 叫 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 table.

中有多行

是否可以 select 来自 main 的所有行并显示名为 Options 的附加列,其中显示所有 t_opno 每条 t_mitm 记录。换句话说,根据提供的数据得出的最终结果应该是:

  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-fiddle:

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

你必须使用 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

由于我正在使用手机,请更正任何打字错误

如果数据库是 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

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

DEMO