0

同じ列の 3 つの異なる数値を表示しようとしています mysql クエリで 3 つのテーブルすべてを結合すると、1 か月を静的に保ちたいと思います: 4 月なので、このようなケースになります。現在の月、前の月と私が取り組んでいる年の静的な月、この場合は 2012 に固執しましょう

table: persons
ID     name
 1     Carl

table: vehicle  
ID     v_name         person_veh
100   Dodge Viper       1


Table:payment
 pay_id , pay_date,    amount  person_id
    1    2012-02-12    1000        1
    2    2012-03-11    780         1
    3    2012-04-15    890         1
    4    2012-05-12    1200        1
    5    2012-06-12    1890        1
    6    2012-07-12    1350        1
    7    2012-08-12    1450        1

だから私がしたいのは、4月の列の金額を表示することです。その行を静的に保ちたいと890言ったので、現在の月は今月でAugust:1450、前月の金額は7月:1350です。最終結果は次のようになります。

name     v_name    april_amount   current_month_amount  previous_month_amount
Carl   Dodge viper    890                 1450                 1350
4

2 に答える 2

2

次を使用できます-これは、CASEステートメントで集計関数を使用します。

select p.name,
  v.v_name,
  sum(case when Month(py.pay_date) = 4 then amount end) april_amount,
  sum(case when Month(py.pay_date) = Month(curdate())
        then amount end) current_month_amount,
  sum(case when Month(py.pay_date) = Month(curdate())-1
        then amount end) previous_month_amount
from persons p
left join vehicle v
  on p.id = v.person_veh
left join payment py
  on p.id = py.person_id
group by p.name,
  v.v_name

SQL Fiddle with Demoを参照してください

于 2012-08-28T15:14:02.390 に答える
0

試す

SELECT a.name, b.pay_date, b.amount, b.person_id, c.v_name 
FROM persons a
LEFT JOIN payment b on a.id = b.person_id 
LEFT JOIN vehicle c on a.id = c.person_veh

このクエリは、id、person_veh、および person_id が、これら 3 つのテーブル間でこのユーザーをリンクする同様の列であると想定しています

于 2012-08-28T14:52:19.653 に答える