示例I有产品数据:
Product_No Column1 Column2 ... ColumnX
1 A 10
2 B 11
3 C 12
对于第X列,我需要此表库存中的单个数据行:
Product_No Inventory_No ColumnA ColumnB ColumnC
1 1 ABC 20 30
1 2 DDD 30 50
2 1 EFG 60 70
2 2 CDE 99 100
3 3 EFF 120 30
列x的结果应为
Product_No Column1 Column2 ... ColumnX
1 A 10 ABC-20-30,DDD-30-50
2 B 11 EFG-60-70,CDE-99-100
3 C 12 EFF-120-30
如何在不改变主查询连接的情况下返回该值,我需要子查询来返回该值。我已经尝试了list_aggregate,但它只能用于我需要从多列组合的一列。谢谢。
答案 0 :(得分:1)
LISTAGG
适合你。
有关此事:
SELECT Product_No, LISTAGG(ColumnA || '-' || ColumnB || '-' || ColumnC, ',')
FROM tbl
GROUP BY Product_No;
有关LISTAGG
的更多信息:http://modern-sql.com/feature/listagg
答案 1 :(得分:1)
What’s the best way to reload / refresh an iframe?
Oracle 11g R2架构设置:
CREATE TABLE Product ( Product_No, Column1, Column2 ) AS
SELECT 1, 'A', 10 FROM DUAL UNION ALL
SELECT 2, 'B', 11 FROM DUAL UNION ALL
SELECT 3, 'C', 12 FROM DUAL
/
CREATE TABLE Inventory ( Product_No, Inventory_No, ColumnA, ColumnB, ColumnC ) AS
SELECT 1, 1, 'ABC', 20, 30 FROM DUAL UNION ALL
SELECT 1, 2, 'DDD', 30, 50 FROM DUAL UNION ALL
SELECT 2, 1, 'EFG', 60, 70 FROM DUAL UNION ALL
SELECT 2, 2, 'CDE', 99, 100 FROM DUAL UNION ALL
SELECT 3, 3, 'EFF', 120, 30 FROM DUAL
/
查询1 :
SELECT p.*, i.ColumnX
FROM Product p
LEFT OUTER JOIN
( SELECT Product_no,
LISTAGG(
ColumnA || '-' || ColumnB || '-' || ColumnC,
','
) WITHIN GROUP ( ORDER BY Inventory_no )
AS ColumnX
FROM Inventory
GROUP BY Product_No
) i
ON ( p.product_no = i.product_no )
<强> SQL Fiddle 强>:
| PRODUCT_NO | COLUMN1 | COLUMN2 | COLUMNX |
|------------|---------|---------|----------------------|
| 1 | A | 10 | ABC-20-30,DDD-30-50 |
| 2 | B | 11 | EFG-60-70,CDE-99-100 |
| 3 | C | 12 | EFF-120-30 |
答案 2 :(得分:0)
您使用join
将表格放在一起。然后listagg()
完成了制作专栏x
:
select p.Product_No, p.Column1, p.Column2,
listagg(i.ColumnA || '-' || i.ColumnB || '-' || i.ColumnC, ',') within group (order by inventory_no) as x
from product p left join
inventory i
on p.product_no = i.product_no
group by p.Product_No, p.Column1, p.Column2;