我需要为以下场景创建一个sql查询:
表名是备注
列 contractno 和 leadid 。
1个contractno可以有多个leadid。 同样, 1个leadid可以分配给多个contractno。
Lets assume:
C1 --> L1
C2 --> L1, L2
C3 --> L2
我只得到一个contractno,即C1作为参数。
现在我必须通过潜水员找到所有针对C1的合同。
请帮助我如何实现这一目标。 谢谢。
答案 0 :(得分:1)
SELECT r1.contractno
FROM remark r1
JOIN remark r2
ON r1.leadid = r2.leadid
WHERE r2.contractno = 'C1'
AND r1.contractno <> 'C1'
这假设您的表格具有以下格式:
contractno leadid
C1 L1
C2 L1
C2 L2
C3 L1
如果你不这样做,那么你需要先将csv值拆分成行:
答案 1 :(得分:0)
如果必须将合同列表分组,则可以使用LISTAGG
。这里也假设您的表格具有线性格式而不是逗号分隔的潜在客户
WITH cn
AS (SELECT DISTINCT leadid
FROM remark
WHERE contractno = 'C1')
SELECT Listagg(r.contractno, ',')
within GROUP (ORDER BY ROWNUM) contractno_C1
FROM remark r
join cn
ON r.leadid = cn.leadid
WHERE r.contractno <> 'C1'
GROUP BY cn.leadid;