Как я могу использовать то же имя для столбца в выводе моего запроса sqlite в качестве значения, которое я сравниваю в предложении ON в объединении? - PullRequest
0 голосов
/ 31 июля 2011

Мой оригинальный вопрос

Когда я выполняю следующий запрос в SQLite, я получаю эту ошибку:

Ошибка запроса: неправильное использование агрегата: сумма () Невозможно выполнить оператор

Когда я изменяю имя столбца "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;

откровение в середине поста

Я почти уверен, что понял, почему я получаюошибка, это потому, что я сравниваю с "Loan" в предложении on моих объединений?

Если так, как я все еще могу использовать слово «Заем» для имени моего столбца в выводе моего запроса

1 Ответ

0 голосов
/ 01 августа 2011

Я предполагаю, что ваша настоящая проблема заключается в неправильном использовании цитат. Одиночные кавычки в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...