0

テーブル名の領収書があります。スキーマは次のとおりです

account_no  date        transaction_type  amount
   s1       2012-7-7    opening           500
   s1       2012-8-13   deposit           1000
   s1       2012-7-17   deposit           400

今、私は次のクエリを持っています

select  month(r.date),
  sum(case when (month(r.date))='7' and r.transaction_type='opening' and r.transaction_type='deposit' then r.amount else '' end )as debit 
from receipt r 
where r.account_no='s1'

しかし、それは私に次のような出力を与えています:

month  debit 
7      0

なぜこの出力が得られるのか誰にも教えてもらえますか?

編集

数字の代わりに月の名前を配置したい場合、その方法

4

3 に答える 3

3

の代わりにOR間の条件が必要なようですr.transaction_type='opening' and r.transaction_type='deposit'AND

select date_format(r.date, '%M'),
  sum(case when (month(r.date))='7' 
        and (r.transaction_type='opening' 
          or r.transaction_type='deposit') 
      then r.amount else 0 end )as debit 
from receipt r 
where r.account_no='s1'

デモで SQL Fiddle を参照してください

または、次を使用できます。

select date_format(r.date, '%M'),
  sum(r.amount)
from receipt r
where r.account_no='s1'
  and month(r.date) = 7
  and r.transaction_type in ('opening', 'deposit')

デモで SQL Fiddle を参照してください

すべての月の を取得する場合sum()は、次を追加する必要がありますgroup by

select date_format(r.date, '%M'),
  sum(r.amount)
from receipt r
where r.account_no='s1'
  and r.transaction_type in ('opening', 'deposit')
group by month(r.date);

また

select date_format(r.date, '%M'),
  sum(case when (r.transaction_type='opening' 
        or r.transaction_type='deposit') 
      then r.amount else 0 end )as debit 
from receipt r 
where r.account_no='s1'
group by month(r.date)

デモで SQL Fiddle を参照してください

于 2012-11-08T11:16:42.570 に答える
2

あなたが言っている

 ...r.transaction_type='opening' and r.transaction_type='deposit' 

r.transactiontype「オープニング」と「デポジット」の両方になることはありません

于 2012-11-08T11:09:26.890 に答える
0

クエリを次のように書き換えます

select month(r.date) as month,
       sum(r.amount) as debit
from receipt r
where r.account_no = 's1'
      and month(r.date) = 7
      and (r.transaction_type = 'opening' or r.transaction_type = 'deposit');

他の人がすでに指摘したようにに変更andします。or

于 2012-11-08T11:16:41.837 に答える