<p>问题是(在编辑之前查看原始问题中的查询),在format()方法调用中有两个字符串替换,但只有一个值。如果要在查询中的两个{}中插入i,应该将它们更改为{0}。另外,给你一个提示,省去一些麻烦,多行字符串使用''''。你知道吗</p>
<pre><code>for i in [1,2,3,4]:
query = ('''SELECT FORMALIZADO, AMORTIZADO, PDT_AMORTIZACION, LSCRV, SUM(DESCUBIERTO) AS T_FORMALIZADO, SUM(CAPITAL_PENDIENTE) AS T_PDT_AMORTIZACION, COUNT(*) as CASOS "
FROM
(SELECT
CASE WHEN DESCUBIERTO <= 1000 THEN 1000
WHEN DESCUBIERTO >= 1001 AND DESCUBIERTO <=2000 THEN 2000
WHEN DESCUBIERTO >=2001 AND DESCUBIERTO <=3000 THEN 3000
WHEN DESCUBIERTO >= 3001 AND DESCUBIERTO <= 4000 THEN 4000
WHEN DESCUBIERTO >= 4001 AND DESCUBIERTO <=5000 THEN 5000
WHEN DESCUBIERTO >=5001 AND DESCUBIERTO <=6000 THEN 6000
WHEN DESCUBIERTO >= 6001 AND DESCUBIERTO <= 7000 THEN 7000
WHEN DESCUBIERTO >= 7001 AND DESCUBIERTO <=8000 THEN 8000
WHEN DESCUBIERTO >=8001 AND DESCUBIERTO <=9000 THEN 9000
WHEN DESCUBIERTO >= 9001 AND DESCUBIERTO <= 10000 THEN 10000
WHEN DESCUBIERTO >= 10001 AND DESCUBIERTO <=11000 THEN 11000
WHEN DESCUBIERTO >=11001 AND DESCUBIERTO <=12000 THEN 12000
WHEN DESCUBIERTO >= 12001 AND DESCUBIERTO <= 13000 THEN 13000
WHEN DESCUBIERTO >= 13001 AND DESCUBIERTO <= 14000 THEN 14000
WHEN DESCUBIERTO >= 14001 AND DESCUBIERTO <=15000 THEN 15000
WHEN DESCUBIERTO >= 15001 THEN 15001
ELSE NULL END AS FORMALIZADO,
CASE WHEN CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0) <= 0.25 THEN 'Q1'
WHEN CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0) >= 0.26 AND CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0) <= 0.50 THEN 'Q2'
WHEN CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0) >= 0.51 AND CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0) <= 0.75 THEN 'Q3'
WHEN CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0) >= 0.76 AND CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0) <= 1 THEN 'Q4'
ELSE NULL END AS AMORTIZADO,
CASE WHEN (1-CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0)) <= 0.25 THEN 'Q1'
WHEN (1-CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0)) >= 0.26 AND (1-CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0)) <= 0.50 THEN 'Q2'
WHEN (1-CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0)) >= 0.51 AND (1-CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0)) <= 0.75 THEN 'Q3'
WHEN (1-CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0)) >= 0.76 AND (1-CAPITAL_PENDIENTE / NULLIF(DESCUBIERTO,0)) <= 1 THEN 'Q4'
ELSE NULL END AS PDT_AMORTIZACION,
L.LSCRV, DESCUBIERTO, CAPITAL_PENDIENTE
FROM ON5H C LEFT JOIN CRV L ON SUBSTR(L.CLIENTE, 1,12) = C.CLIENTE
WHERE SUBSTR(C.FCH_FINANCIACION,1,6) = TO_CHAR(ADD_MONTHS(SYSDATE,{0}),'YYYYMM') AND NOMBRE_PRODUCTO = 'YM' AND TO_CHAR(C.FECHA_BASE, 'YYYYMM') = TO_CHAR(ADD_MONTHS(SYSDATE,{0}),'YYYYMM') AND POSIC_ACTUAL = '010')
GROUP BY LSCRV, FORMALIZADO, PDT_AMORTIZACION, AMORTIZADO
ORDER BY LSCRV''').format(i)
</code></pre>