gpt4 book ai didi

java - Java 中的 SELECT 类似 "if Value of previous Month is negative, do sum of Value of the typed Month and the Value of the previous one"

转载 作者:行者123 更新时间:2023-11-29 14:11:31 28 4
gpt4 key购买 nike

该表称为 imposto。

+------------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------+------+-----+---------+-------+
| cod_bolsa | varchar(7) | NO | PRI | NULL | |
| mes | date | NO | PRI | NULL | |
| ano | date | NO | PRI | NULL | |
| lucro_mes_vista | double | NO | | NULL | |
| preju_mes_vista | double | NO | | NULL | |
| lucro_mes_ouro | double | NO | | NULL | |
| preju_mes_ouro | double | NO | | NULL | |
| resul_mes_demais | double | NO | | NULL | |
| venda_vista | double | NO | | NULL | |
| venda_ouro | double | NO | | NULL | |
| resul_mes | double | NO | | NULL | |
| resul_acu | double | NO | | NULL | |
| base_calc | double | NO | | NULL | |
| imp_renda | double | NO | | NULL | |
| imp_recol_mes | double | NO | | NULL | |
| base_calc_irrf | double | NO | | NULL | |
| imp_retido_acu | double | NO | | NULL | |
| imp_devido | double | NO | | NULL | |
+------------------+------------+------+-----+---------+-------+

3 个 JTextFields,一个获取 cod_bolsa,另一个获取 mes(月份),最后一个获取 ano(年份)。

resul_acu 是 lucro_mes_vista(所选月份的利润)和 preju_mes_vista(所选月份的亏损)之间的总和。

如果 result_acu 为正:imp_retido_acu 为 0。

如果上个月的 preju_mes_vista 值(无符号)大于该月的 lucro_mes_vista(即,如果损失多于利润):imp_retido_acu 是 imp_recol_mes(其值为 lucro_mes_vista + preju_mes_vista 的 0.005%)之间的总和所选月份和上个月的 imp_recol_mes。

我尝试过:

String sql = "SELECT a.cod_bolsa AS Codigo, "
+ "a.nome AS Nome, "
+ "b.data AS Data, "
+ "b.lucro_mes_vista AS Lucro_do_Mes_Acoes_Vista, "
+ "b.preju_mes_vista AS Prejuizo_do_Mes_Acoes_Vista, "
+ "b.venda_vista AS Venda_Acoes_Vista, "
+ "b.lucro_mes_vista+b.preju_mes_vista AS Resultado_do_Mes, "
+ "b.lucro_mes_vista+b.preju_mes_vista AS Resultado_Acumulado, "
+ "b.base_calc AS Base_de_Calculo, "
+ "b.imp_renda AS Imposto_de_Renda, "
+ "(b.lucro_mes_vista+b.preju_mes_vista)*0.00005 AS Imposto_Recolhido_no_Mes, "
+ "b.base_calc_irrf AS Base_de_Calculo_IRRF, "

+ "b.imp_retido_acu "
+ "IF((b.lucro_mes_vista+b.preju_mes_vista)>0, "
+ "imp_retido_acu=0 " // if true
+ "AS Imposto_Retido_Acumulado, "

+ "b.imp_retido_acu=((b.lucro_mes_vista+b.preju_mes_vista)*0.00005)+"
+ "(b.lucro_mes_vista+b.preju_mes_vista)*0.00005) " // if false
+ "AS Imposto_Retido_Acumulado "

+ "WHERE DATE_FORMAT(STR_TO_DATE(b.data,'%Y-%m') = DATE_FORMAT("
+ "DATE_ADD(STR_TO_DATE(b.data,'%Y-%m'), INTERVAL -1 MONTH), '%Y-%m') "

+ "b.imp_devido AS Imposto Devido "

+ "FROM cadastro a LEFT OUTER JOIN imposto b USING (cod_bolsa) "
+ "WHERE a.cod_bolsa=?, MONTH(b.mes)=? AND YEAR(b.ano)=? ";

String consCod = FrmImposto.txtCodImp.getText();
String consMes = FrmImposto.txtMes.getText();
String consAno = FrmImposto.txtAno.getText();

尽管在 Sashi Kant 更正之前输入 txtCodImp 字段时指定了参数 1,但我收到以下错误:

java.sql.SQLException: No value specified for parameter 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2603)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2578)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2502)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2259)
at view.ListarImposto.Pstmt_executeQuery_PopulaTabela(ListarImposto.java:145)
at view.ListarImposto.<init>(ListarImposto.java:91)
at view.FrmImposto.jButton2ActionPerformed(FrmImposto.java:109)
at view.FrmImposto.access$000(FrmImposto.java:11)
at view.FrmImposto$1.actionPerformed(FrmImposto.java:51)

EDIT1:现在我明白了,这是更严重的:

MySQLSyntaxErrorException:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
'WHERE DATE_FORMAT(STR_TO_DATE(b.data,'%Y-%m') = DATE_FORMAT(DATE_ADD(STR_TO_DATE'
at line 1

EDIT2:询问数据库老师,我得到了一些进步。

SELECT cod_bolsa AS cod_venda,
DATE_FORMAT(data, '%Y-%m') AS mes_venda, SUM(qtd_venda*preco_venda) AS valor_venda
FROM movimentacao
WHERE cod_bolsa='0000002';

SELECT cod_bolsa AS cod_compra, DATE_FORMAT(data, '%Y-%m') AS mes_compra, SUM(qtd_compra*preco_compra) AS valor_compra
FROM movimentacao
WHERE cod_bolsa='0000002';

valor_compra 与 lucro_mes_vista 相同,valor_venda 与 prejuizo_mes_vista 相同

上述 SELECT 的结果:

+-----------+-----------+-------------+
| cod_venda | mes_venda | valor_venda |
+-----------+-----------+-------------+
| 0000002 | 2012-08 | 337.25 |
+-----------+-----------+-------------+

+------------+------------+--------------+
| cod_compra | mes_compra | valor_compra |
+------------+------------+--------------+
| 0000002 | 2012-08 | 181.8 |
+------------+------------+--------------+

获取 Resultado_do_Mes:

SELECT venda.data_venda, compra.data_compra,
(venda.valor_venda)-(compra.valor_compra) AS resultado_do_mes

FROM
(SELECT cod_bolsa cod_venda, DATE_FORMAT(data, '%Y-%m-%d') AS data_venda,
SUM(qtd_venda*preco_venda) AS valor_venda

FROM movimentacao
GROUP BY cod_bolsa) venda

LEFT JOIN
(SELECT cod_bolsa AS cod_compra, data AS data_compra,
SUM(qtd_compra*preco_compra) AS valor_compra

FROM movimentacao
GROUP BY cod_bolsa) compra

ON compra.cod_compra = venda.cod_venda AND compra.data_compra = venda.data_venda

WHERE venda.cod_venda = '0000002'
OR compra.cod_compra = '0000002';

最佳答案

查询没有任何问题,唯一的问题是您忘记在PreparedStatement中设置参数。

您需要设置::

a.cod_bolsa=?, MONTH(b.mes)=? AND YEAR(b.ano)=? ";

喜欢

 ptmt.setString(1,value)

关于java - Java 中的 SELECT 类似 "if Value of previous Month is negative, do sum of Value of the typed Month and the Value of the previous one",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13442647/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com