1

私は本当に 1 つの sql select ステートメントで立ち往生しています。

これは、以下の sql ステートメントから取得した出力/結果です。

ここに画像の説明を入力

必要なもの: msisdn によって、assignedVouchersNumber 列と usedVouchersNumber 列を 1 つの行にまとめる必要があります。たとえば、"msisdn" 723709656 が表示されている場合は、現在 2 つの行があります。

しかし、assignedVouchersNumber = 2 で 1 行にする必要があります。問題はどこにありますか?

SELECT eu.msisdn,
   eu.id as userId,

   sum(case ev.voucherstate when '1' then 1 else 0 end) as assignedVouchersNumber,
   sum(case ev.voucherstate when '2' then 1 else 0 end) as usedVouchersNumber,

   ev.extra_offer_id,
   ev.create_time,
   ev.use_time,
   ev.id as voucherId,
   ev.voucherstate
FROM   extra_users eu
   JOIN (SELECT sn.msisdn AS telcislo,
                stn.numberid
         FROM   stats_number sn
                JOIN stats_target_number AS stn
                  ON ( sn.numberid = stn.numberid )
         WHERE  stn.targetid = 1) xy
     ON eu.msisdn = xy.telcislo
   JOIN extra_vouchers AS ev
     ON ( eu.id = ev.extra_user_id )
WHERE  ev.create_time BETWEEN '2012-07-23 00:00:00' AND '2013-08-23 23:59:59'
   AND ev.use_time <= '2013-08-23 23:59:59'
   AND ev.use_time >= '2012-07-23 00:00:00'
   AND ev.voucherstate IN ( 1, 2 )
   AND Ifnull(ev.extra_offer_id IN( 2335, 3195, 30538 ), 1)
   GROUP BY eu.msisdn, ev.extra_offer_id, ev.voucherState
ORDER  BY eu.msisdn ASC  
4

2 に答える 2

1

わかりました... ev.voucherState によるグループ化はすべきではありません

GROUP BY eu.msisdn, ev.extra_offer_id, ev.voucherState

その後、ev.voucherState を削除しましたが、現在は機能しています。

于 2013-08-28T10:12:30.347 に答える