2011-07-31 1 views
0

私の元の質問どのように私の結合のON句で比較している値として、私のsqliteクエリの出力内の列に同じ名前を使用できますか?

私はSQLiteの中に次のクエリを実行すると、私はこのエラーを取得する:私はloan_amountのようなものに"Loan"列の名前を変更すると

Query Error: misuse of aggregate: sum() Unable to execute statement

エラーが消えると私のクエリは正常に動作します。 "Loan"に問題があるのはなぜですか?私は、私はエラーを取得するなぜ私は私の加入の上句で"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"という単語を使用するにはどうすればいいですか?

答えて

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;