Sql 如何使用模式将多个结果选择到一行中
我读过,但我不明白 我的桌子:Sql 如何使用模式将多个结果选择到一行中,sql,oracle,oracle11g,pivot,Sql,Oracle,Oracle11g,Pivot,我读过,但我不明白 我的桌子: ----------------- | P_TABLE | ----------------- | P_ID | P_DATA | | 12 | AAAA | | 15 | BBBB | | 19 | CCCC | ----------------- 通常查询是从p_表p中选择p.p_ID,结果是 -------- | P_ID | -------- | 12 | | 15 | | 19 | -------- 但
-----------------
| P_TABLE |
-----------------
| P_ID | P_DATA |
| 12 | AAAA |
| 15 | BBBB |
| 19 | CCCC |
-----------------
通常查询是从p_表p中选择p.p_ID,结果是
--------
| P_ID |
--------
| 12 |
| 15 |
| 19 |
--------
但是,我需要这样的结果
---------------
| P_ID |
---------------
| (12,15,19) |
怎么做
我认为这个解决方案可以通过,但我不知道如何使用
谢谢你的帮助。我想你可以用
可以通过SQL执行吗?或者需要C来帮助了解模式?结果中是否需要这些括号?另外,您需要为一列或多列执行此操作吗?如果是后者,你可以将PIVOT与公认的答案结合起来;LISTAGG与MAX或SUM一样,是一个聚合函数,可以很好地与PIVOT配合使用。@mathguy没问题,我使用了| |,即选择| | listaggp_id','| |,谢谢你的关注@mathguy,但是,我仍然对PIVOT函数感兴趣,如果你发布如何,我认为它应该对另一个有帮助。所以,这是一个更有意义的问题,你没有回答。您或将来可能需要为多个列执行此操作吗?太棒了,非常感谢您。@Toondardevil-或者,如果p_id应按其他内容排序,而不仅仅是按其自身的递增顺序排序,例如,如果必须按p_数据排序,或者可能按您未显示的时间戳列排序,也可以执行此操作,简单-只需在小组内更改您的订单即可。
select listagg(p_id,',') within group (order by p_id) p_id from p_table;