我是SQL新手,我尝试在PostreSQL上进行递归查询,但没有任何运气。
我有一个tb\U invoice表,其中包含以下列:
发票编号
|
客户编号
|
已付款
|
总计金额
|
“F0000C000400200”
|
“C0004”
|
“Y”
|
28786.7
|
“F0000C000400201”
|
“C0004”
|
“N”
|
5624.29
|
“F0000C000400202”
|
“C0004”
|
“Y”
|
25675.54
|
“F0000C000400203”
|
“C0004”
|
“Y”
|
35479.72
|
“F0000C000400207”
|
“C0004”
|
“Y”
|
23497.47
|
“F0000C000500212”
|
“C0005”
|
“N”
|
14754.03
|
“F0000C000500213”
|
“C0005”
|
“N”
|
3073.5
|
我想做一个递归CTE,为每个客户编号在一行上获取大于28.000欧元的未付款发票,并为发票数量排序结果。它应该是这样的(在nombre\u cliente列中应该显示cust\u no)。
但我无法完成代码。我尝试了多种方法,但它总是返回具有重复值的行,或者每行只返回一张发票。
这是我尝试过的一些代码。我知道我的错误在于我在工会条款中给出的条件,但我无法找到解决方案。。。
WITH RECURSIVE lista_facturas AS (
SELECT
cust_no,
ROW_NUMBER() OVER (PARTITION BY cust_no) AS numero_fila,
COUNT(*) OVER (PARTITION BY cust_no) AS max_numero_fila,
CAST (invoice_no AS TEXT) AS resultado
FROM
factura_cliente
UNION ALL
SELECT
f.cust_no,
ROW_NUMBER() OVER (PARTITION BY f.cust_no) AS numero_fila,
COUNT(*) OVER (PARTITION BY f.cust_no) AS max_numero_fila,
CAST (l.resultado || ',' || f.invoice_no AS TEXT) AS resultado
FROM
factura_cliente f INNER JOIN lista_facturas l
ON (l.cust_no = f.cust_no
AND f.numero_fila = l.numero_fila + 1
AND f.numero_fila <= l.max_numero_fila)
), factura_cliente AS(
SELECT
cust_no,
invoice_no,
ROW_NUMBER() OVER (PARTITION BY cust_no) AS numero_fila,
COUNT(*) OVER (PARTITION BY cust_no) AS max_numero_fila
FROM erp.tb_invoice i
WHERE payed = 'N'
AND tot_amount > 28000
)
SELECT
cust_no,
resultado
FROM
lista_facturas
;