如何将多行值合并到oracle中另一个表的一行中?
问题描述:
我知道我的问题标题不对,对不起。我真正想要做的是: 我有2个表即账户表和历史表如下 - 帐户表如何将多行值合并到oracle中另一个表的一行中?
BranchID | AccountNo
101 | 123456
102 | 123456
102 | 123457
历史表
BranchID | AccountNo EmployeeName | EmployeeType
101 | 123456 | Mr. ABC | PMO
101 | 123456 | Mr. TRY | RO
101 | 123456 | Mr. OPR | Ref
102 | 123456 | Mr. WER | PMO
102 | 123456 | Mr. CVB | Ref
102 | 123457 | Mr. QSR | PMO
102 | 123457 | Mr. LIT | RO
102 | 123457 | Mr. GHK | Ref
我想原样
综合作用的结果BranchID | AccountNo | PMOName | ROName | RefName
101 | 123456 | Mr. ABC | Mr. TRY | Mr. OPR
102 | 123456 | Mr. WER | | Mr. CVB
102 | 123457 | Mr. QSR | Mr. LIT | Mr. GHK
我怎样才能做到这一点?
答
下面的查询应获取所需的详细信息。它的作用是 - 遍历所有的帐户,然后取不同的员工姓名为每名员工类型。你也可以用连接来完成它。
SELECT account.branchid BranchID,
account.accountno AccountNo,
(SELECT employeename
FROM history
WHERE account.branch_id = history.branch_id
AND account.accountno = history.accountno
AND history.employeetype = 'PMO'
) PMOName,
(SELECT employeename
FROM history
WHERE account.branch_id = history.branch_id
AND account.accountno = history.accountno
AND history.employeetype = 'RO'
) ROName,
(SELECT employeename
FROM history
WHERE account.branch_id = history.branch_id
AND account.accountno = history.accountno
AND history.employeetype = 'Ref'
) RefName
FROM account
;
+0
不工作的每一个帐户号码,最大正在返回空行。 –
+0
@KayserAhmed则可能是在你的'employeetype'场'history'表不同的值或更少的数据 –
答
它的基本支点查询:
select *
from account join history using (branchid, accountno)
pivot (max(employeename) for employeetype in ('PMO' pmo, 'RO' ro, 'Ref' ref))
order by branchid, accountno
BRANCHID ACCOUNTNO PMO RO REF
-------- --------- ---------- ---------- ----------
101 123456 Mr. ABC Mr. TRY Mr. OPR
102 123456 Mr. WER Mr. CVB
102 123457 Mr. QSR Mr. LIT Mr. GHK
查询什么都试了试至今写? –
您正在寻找'LISTAGG()' –
使用内部联接两个表帐户Table.BranchID =历史Table.BranchID并选择列包含BranchID | AccountNo | PMOName | ROName |顺便提一下,RefName 是sql的概念。 – LogicalDesk