2016-08-04 9 views
0
SELECT userid,                       
    (SELECT CASE WHEN (COUNT(CASE WHEN casinowagers != 0 
      THEN 1 
      ELSE null 
      END) 
       + COUNT(CASE WHEN depositmade_amt != 0 
         THEN 1 
          ELSE null 
         END)) >= 3 
     AND (Round(sum(totalhold - playercomps - freemoney - (depositmade_amt*.1)),2)) >= 10 
       THEN "VIP" 
        ELSE "NON-VIP" 
       END as VIPcheck 
    FROM player_activity   
    WHERE YEAR(txndate) = YEAR(CURRENT_DATE - INTERVAL 3 MONTH) 
     AND MONTH(txndate) = MONTH(CURRENT_DATE - INTERVAL 3 MONTH)   
    ) as vipMonthStatus,    
    (COUNT(CASE WHEN casinowagers != 0 
      THEN 1 
      ELSE null 
      END) 
       + COUNT(CASE WHEN depositmade_amt != 0 
         THEN 1 
          ELSE null 
         END)) as activityCount, 
    (Round(sum(totalhold - playercomps - freemoney - (depositmade_amt*.1)),2)) as Value,       
FROM player_activity 
WHERE userid = 2023410 
GROUP BY year(txndate),month(txndate) 
LIMIT 1000 

したがって、vipMonthのステータスは常に「VIP」として返されます。ただし、5月の場合(以下の「場所」のため)、1つの預金と1つの賭け金のみが作成されたため、「ノンビップ」である必要があります。CASE文がSQLのように機能しない

何がありますか?

(WHERE YEAR(txndate) = YEAR(CURRENT_DATE - INTERVAL 3 MONTH) 
     AND MONTH(txndate) = MONTH(CURRENT_DATE - INTERVAL 3 MONTH)) 
+0

このサブクエリで 'WHERE userid = 2023410'が必要であると推測しています(またはそれを同等のWHEREと関連付ける)。 – Uueerdo

答えて

0

あなたは、メインクエリでplayer_activityテーブルにvipMonthStatusのサブクエリでplayer_activityテーブルを結ぶ必要があります。

「内部」のplayer_activityテーブルと「outer」のplayer_activityテーブルが別々に分かります。 in_player_activityやout_player_activityのようなもの。

次に、内部テーブルのレコードをuseridに基づいて外部テーブルの関連レコードに制限するために、追加のWHEREステートメントをvipMonthStatusサブクエリに追加する必要があります。

FROM player_activity in_player_activity  
WHERE YEAR(in_player_activity.txndate) = YEAR(CURRENT_DATE - INTERVAL 3 MONTH) 
    AND MONTH(in_player_activity.txndate) = MONTH(CURRENT_DATE - INTERVAL 3 MONTH) 
    AND in_player_activity.userid = out_player_activity.userid 

は、あなたが他の列名のすべてにエイリアスの接頭辞を追加する必要があります、あなたは表の別名を導入したことを今に注意してください:それはこのように見ていることになります。個人的には、opaやipaのようなもっと簡潔なものを使用します。