如何在oracle sql查询中获取所有合同no对Leads?

时间:2017-10-23 14:42:02

标签: sql oracle

我需要为以下场景创建一个sql查询:

表名是备注

contractno leadid

1个contractno可以有多个leadid。 同样, 1个leadid可以分配给多个contractno。

Lets assume:
C1 --> L1
C2 --> L1, L2
C3 --> L2 

我只得到一个contractno,即C1作为参数。

现在我必须通过潜水员找到所有针对C1的合同。

请帮助我如何实现这一目标。 谢谢。

2 个答案:

答案 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值拆分成行:

Turning a Comma Separated string into individual rows

答案 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;  

http://sqlfiddle.com/#!4/54e48/1/0