如何在我的sqlite查询输出中使用相同的名称作为我在join的ON子句中进行比较的值?

时间:2011-07-31 19:58:48

标签: sqlite sum aggregate misuse

我原来的问题

当我在SQLite中执行以下查询时,出现此错误:

  

查询错误:滥用聚合:sum()无法执行语句

当我将"Loan"列的名称更改为loan_amount时,错误消失,我的查询工作正常。为什么"Loan"存在问题?

select
    t.*

    , coalesce(sum(ded0.after_tax_ded_amt), 0) as "Loan"

    , coalesce(sum(ded1.after_tax_ded_amt), 0) as ee_advance_amount

from totals t

  left join totals as ded0
    on t.ee_ssn = ded0.ee_ssn
    and t.deduction_code = "Loan"
    and ded0.deduction_code = "Loan"

  left join totals as ded1
    on t.ee_ssn = ded1.ee_ssn
    and t.deduction_code = "EE Advance"
    and ded1.deduction_code = "EE Advance"

group by t.ee_ssn;

中期启示

我很确定我弄明白为什么会收到错误,是因为我在联接的on-clause中与"Loan"进行比较?

如果是这样,我如何在查询输出中仍然使用“贷款”一词作为我的列名?

1 个答案:

答案 0 :(得分:0)

我猜你真正的问题是引用误用。 SQL中的单引号用于引用字符串文字,双引号用于引用需要区分大小写或包含奇数字符的列和表名。 SQLite对奇怪的语法非常宽容,所以它可能会猜测"Loan"的含义和猜测错误。试试这个:

select
    t.*
    , coalesce(sum(ded0.after_tax_ded_amt), 0) as "Loan"
    , coalesce(sum(ded1.after_tax_ded_amt), 0) as ee_advance_amount
from totals t
  left join totals as ded0
    on t.ee_ssn = ded0.ee_ssn
    and t.deduction_code = 'Loan'
    and ded0.deduction_code = 'Loan'
  left join totals as ded1
    on t.ee_ssn = ded1.ee_ssn
    and t.deduction_code = 'EE Advance'
    and ded1.deduction_code = 'EE Advance'
group by t.ee_ssn;