Sqlite3选择

问题描述 投票:0回答:1

我想使用 SQLite 3 中多个表中的多个值进行计算。这是正确的语法吗?

data_sql2 = """SELECT *
                   FROM ra_list
                   JOIN kunden ON (ra_list.ku_nr = kunden.kundennr)
                   JOIN debit_customer ON (ra_list.ku_nr = debit_customer.ku_nr)
                   LEFT JOIN zvb_debit_customer ON (ra_list.ku_nr = zvb_debit_customer.ku_nr)
                   CASE WHEN skonto != 0 or skonto is not NULL
                   THEN ra_list.betrag_brutto - (ra_list.betrag_brutto / 100 * skonto)
                   END
                   AS netto FROM zvb_debit_customer,
                   WHERE ra_list.re_dat = ?
                   ORDER BY ra_list.re_nr DESC
                """
python sqlite
1个回答
0
投票
  1. CASE 表达式应该是 SELECT 子句的一部分。

    选择 ra_列表。, 昆登., 借方客户。, zvb_debit_customer., 案件 当 skonto != 0 时 ra_list.betrag_brutto - (ra_list.betrag_brutto / 100 * skonto) 否则 ra_list.betrag_brutto END AS 网络

  2. CASE表达式后的FROM zvb_debit_customer不正确;相反,zvb_debit_customer 应该是 LEFT JOIN 的一部分。

    在 ra_list.ku_nr 上左加入 zvb_debit_customer = zvb_debit_customer.ku_nr

  3. WHERE 子句前面不应有逗号。

  4. skonto is not NULL 条件是多余的,因为 skonto != 0 将已经忽略 NULL 值,因为 SQL 如何通过不等式检查处理 NULL。

所以我的最终答案是这样的:

SELECT
    ra_list.*,
    kunden.*,
    debit_customer.*,
    zvb_debit_customer.*,
    CASE
        WHEN skonto != 0 THEN ra_list.betrag_brutto - (ra_list.betrag_brutto / 100 * skonto)
        ELSE ra_list.betrag_brutto
    END AS netto
FROM ra_list
JOIN kunden ON ra_list.ku_nr = kunden.kundennr
JOIN debit_customer ON ra_list.ku_nr = debit_customer.ku_nr
LEFT JOIN zvb_debit_customer ON ra_list.ku_nr = zvb_debit_customer.ku_nr
WHERE ra_list.re_dat = ?
ORDER BY ra_list.re_nr DESC;
© www.soinside.com 2019 - 2024. All rights reserved.