我有桌子可以说:
**Master Table**
ID, MasterID, Info, Date
1, 'B101', 'ABC', 12-01-15
**Detail Table**
ID, MasterID, Code
1, 'B101', '20'
2, 'B101', '50'
3, 'B101', 'x'
4, 'B101', 'y'
我希望结果集为:
MasterID, BankCodes, Date
'B101', 20-50-x-y, 12-01-15
我在db2工作。
答案 0 :(得分:1)
根据您的db2版本,您可以执行以下操作:
with details(masterid, code) as ( values ('B101',20),('B101',50) )
select masterid, listagg(code,'-')
from details
group by masterid
B101 20-50
您可以通过以下方式指定代码订单:
listagg(code,'-') WITHIN GROUP(ORDER BY code)
答案 1 :(得分:0)
执行GROUP BY
,连接最小代码' - '最大代码:
select mt.MasterID,
cast(min(dt.code) as varchar(11)) || '-' || cast(max(dt.code) as varchar(11)) as BankCodes,
mt.date
from MasterTable mt
left join DetailTable dt on mt.MasterID = dt.MasterID
group by mt.MasterID, mt.date
LEFT JOIN
也会返回MasterId,而不提供任何详细信息。如果不需要,请改为INNER JOIN
。
编辑:或者我在这里弄错了什么?如果masterid有3个不同的代码,那么预期的结果是什么?