DB2 Query在单个字段中获取多个行值

时间:2015-12-01 07:18:07

标签: sql database db2

我有桌子可以说:

**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工作。

2 个答案:

答案 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个不同的代码,那么预期的结果是什么?