我的SQL技能很生疏,尽管谷歌搜索我还不能理解这一点。我会感谢任何帮助。
我有一个订单表,包含典型的订单相关字段:订单#(这是主键),采购订单#等。
基本上,我想要实现的目标是:找到重复的采购订单编号,并列出订单编号与它们相关。输出应该类似于:
PO # | ORDERS
-----------------
1234 | qwerty, abc
-----------------
1235 | xyz, def
到目前为止,我已经提出了一个查找重复的PO编号及其出现次数的查询,但我无法找出订单列表部分。
SELECT PO,COUNT(PO) AS OCCURRENCES
FROM ORDERS
GROUP BY PO
HAVING COUNT(PO) > 1
顺便说一句,这是甲骨文,如果它有任何区别(除了我生锈的技能之外我还是新手,唉!)。谢谢你的帮助!
答案 0 :(得分:3)
您对“多个PO”的逻辑是正确的。如果您希望重复PO的订单号位于以逗号分隔的列表中,LISTAGG
function将起作用:
SELECT
PO,
LISTAGG(OrderNumber, ',') WITHIN GROUP (ORDER BY OrderNumber) AS OrderNums
FROM ORDERS
GROUP BY PO
HAVING COUNT(PO) > 1
查看LISTAGG click here的文档。
答案 1 :(得分:0)
SELECT groups.orders FROM (SELECT PO,COUNT(PO) AS OCCURRENCES
FROM ORDERS
GROUP BY PO
HAVING COUNT(PO) > 1) groups
JOIN orders on orders.po = groups.po
那会有用吗?
答案 2 :(得分:0)
自从我使用Oracle以来已经有一段时间了,但是,我认为这样做会有所帮助:
SELECT PO,
OCCURENCES,
ORDERID /* not sure about your column name for order # */
FROM ORDERS
WHERE PO IN
(
SELECT PO
FROM ORDERS
GROUP BY PO
HAVING COUNT(PO) > 1
)
答案 3 :(得分:0)
您可以使用wm_concat
功能:
select
PO,
wm_concat(OrderNumber) AS ORDERS
from orders
group by PO
having count(PO) > 1