PLSQL 将多行合并为一列

PLSQL Merge multiple rows into one column

这是我的 table 数据。

我需要 select 将其视为新列。(如果仅可用)这就是我需要的结果

我试过这种方法。但没有得到正确的结果

SELECT        dbo.tables.DocNo, dbo.tables.Types, tables_1.Types AS viewstatus
FROM            dbo.tables INNER JOIN
                         dbo.tables AS tables_1 ON dbo.tables.DocNo = tables_1.DocNo
WHERE        (dbo.tables.Types = N'Original')
GROUP BY dbo.tables.DocNo, dbo.tables.Types, tables_1.Types
HAVING        (tables_1.Types = N'Views')

这是一个选项(阅读代码中的注释):

有示例数据

SQL> with test (id, types, docno, name) as
  2    (select 1, 'Original', 1001, 'Pdf'  from dual union all
  3     select 2, 'Views'   , 1001, 'Pdf'  from dual union all
  4     select 3, 'Original', 1002, 'Word' from dual union all
  5     select 4, 'Original', 1003, 'Word' from dual union all
  6     select 5, 'Views'   , 1003, 'Pdf'  from dual
  7    ),

  8  -- separate Originals from Views
  9  a as
 10    (select * from test where types = 'Original'),
 11  b as
 12    (select * from test where types = 'Views')
 13  -- Outer join A and B on DOCNO
 14  select a.id, a.types, a.docno, a.name, b.types
 15  from a left join b on b.docno = a.docno
 16  order by a.id;

        ID TYPES         DOCNO NAME TYPES
---------- -------- ---------- ---- --------
         1 Original       1001 Pdf  Views
         3 Original       1002 Word
         4 Original       1003 Word Views

SQL>

没有连接的“group by”解决方案:

select min(id), 
min(case when Types = 'Original' then Types end), 
DocNo,
max(Name),
min(case when Types = 'Views' then Types end)
from table_name
group by DocNo;

Fiddle