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_mitm。 Main.t_mitm 是独一无二的。但是对于每个 t_mitm 在 branch 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:
你必须使用 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 中没有匹配的数据。
我已经 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_mitm。 Main.t_mitm 是独一无二的。但是对于每个 t_mitm 在 branch 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:
你必须使用 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 中没有匹配的数据。