2016-11-05 6 views
2

私はこのような何かをしたい:どこでIFを使ってINを使うのか?

SELECT 
    p.name_en AS 'province_$lang', 
    p.province_code AS 'province_code_$lang', 
    COUNT(u.id) AS 'total_$lang', 
    COUNT(u.id) AS total 
FROM applications AS a 
LEFT JOIN users AS u on u.id = a.user_id 
LEFT JOIN provinces AS p on p.province_code = u.province_code 
WHERE a.progress_status IN (0,1,2,3) AND IF(a.progress_status = 2,a.denial_type ,1) IN IF(a.`progress_status` = 2,(1,2,3),1) 
GROUP BY u.province_code 

は、私はそれらの表1に2枚のフィールドを持っていると仮定し、これら0,1,2, or 3値の1、および1,2, or 3を取ることができます別のフィールドdenial_typeが、唯一のdenial_typeを持っていることができprogress_statusですprogress_statusが2 あるので、私はprogress_statusIN 0,1,2,3であり、そのprogress_statusが2であるそれらのレコードのために、そのdenial_typeIN 1,2,3

あるべきかどうかを確認したいときに、これらの値のいずれかを取ることができます
+0

を行う必要があり、それは '選択query'です。また、クエリ全体を表示できますか? –

+0

@MilanGupta私は自分の質問を更新しました。 – jones

答えて

0

これを試してみてください:

SELECT 
p.name_en AS 'province_$lang', 
p.province_code AS 'province_code_$lang', 
COUNT(u.id) AS 'total_$lang', 
COUNT(u.id) AS total 
FROM applications AS a 
LEFT JOIN users AS u on u.id = a.user_id 
LEFT JOIN provinces AS p on p.province_code = u.province_code 
WHERE a.progress_status IN (0,1,2,3) AND 
IF(a.progress_status = 2, 
(select denial_type from applications where denial_type IN (1,2,3)) ,1) 
GROUP BY u.province_code 

値がIN (1,2,3)であるあなたの問題を解決する可能性がありますそれらのdenial_typeのみを選択するようにsubqueryIFで条件を使用します。

希望すると助かります!

+0

サブクエリは複数の行を返します。 – jones

+0

'LIMIT'を使ってみてください:' denial_type IN(1,2,3)LIMIT 1' –

0

ポスト集約フィルタリングは、トリックに

SELECT 
    p.name_en AS 'province_$lang', 
    p.province_code AS 'province_code_$lang', 
    COUNT(u.id) AS 'total_$lang', 
    COUNT(u.id) AS total 
FROM applications AS a 
LEFT JOIN users AS u on u.id = a.user_id 
LEFT JOIN provinces AS p on p.province_code = u.province_code 
GROUP BY u.province_code 
HAVING SUM(a.progress_status IN (0,1,2,3))>0 
AND SUM(a.progress_status = 2 AND a.denial_type IN(1,2,3))>0 
関連する問題