ON DUPLICATE KEY UPDATE
3ヶ月の集計結果を、QWERTYのPKとかぶらないものだけインサートします。
ただし、PKとかぶったものの中でも、QWERTYのCNT1が0のレコードについては、
QWERTYのCNT1のみ集計結果をアップデートしようとしています。
しかし、「~」部分の「ON DUPLICATE KEY UPDATE・・・」を挿入した際に、
エラー(ERROR 1111 (HY000): Invalid use of group function)となってしまいます。
<SQL文>
INSERT IGNORE INTO QWERTY( PHOGE, J, MHOGE, SHOGE, CNT1, CNT2, CNT3, NDATE, YMO )
select TEST.PHOGE, TEST.J, 'ABCD', TEST.SHOGE, sum(TEST.m1cnt) AS M1, sum(TEST.m2cnt) AS M2, sum(TEST.m3cnt) AS M3, '2014-07-01' , TEST.YMO
from
(
select PHOGE, J, SHOGE, SUM(OD_CNT) AS m1cnt, 0 AS m2cnt, 0 AS m3cnt, YMO
from HUJIKO WHERE CARD = '1' AND (KHOGE = '1' OR KHOGE = '9') AND (ODATE LIKE'2014-07%')
group by PHOGE, J, YMO
UNION
select PHOGE, J, SHOGE, 0 AS m1cnt, SUM(OD_CNT) AS m2cnt, 0 AS m3cnt, YMO
from HUJIKO WHERE CARD = '1' AND (KHOGE = '1' OR KHOGE = '9') AND (ODATE LIKE'2014-08%')
group by PHOGE, J, YMO
UNION
select PHOGE, J, SHOGE, 0 AS m1cnt, 0 AS m3cnt, SUM(OD_CNT) AS m3cnt, YMO
from HUJIKO WHERE CARD = '1' AND (KHOGE = '1' OR KHOGE = '9') AND (ODATE LIKE'2014-09%')
group by PHOGE, J, YMO
) AS TEST
GROUP BY TEST.PHOGE, TEST.YMO, TEST.J
ON DUPLICATE KEY UPDATE CNT1=if(CNT1=0, TEST.M1 , CNT1);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
「ON DUPLICATE KEY UPDATE 」で実現不可能であれば、
他の方法を取りたいのですが、
なるべく一つのSQL文で実現可能な方法をとりたいと考えています。
ご教示の程よろしくお願いいたします。
お礼
回答有難うございます。SQLを始めてまもなくて右往左往しておりました。 いろいろな表現があるのですね。難しいですね。 本当に回答してくださり有難うございました。