为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:达梦8
【操作系统】:
【CPU】:
【问题描述】*:求大神帮忙看个sql,不知道哪里出错了,mysql是可以用的,文档也看了找不到思路
SELECT
t1.yearstr,
IFNULL(COUNT(t2.id), 0) ajs,
IFNULL(SUM(t2.chujingrenshu), 0) yjs,
SUM(
IFNULL(t2.ajqk_bg_allnum, 0) + IFNULL(t2.ajqk_er_bg_allnum, 0)
) allbgrs,
SUM(
IFNULL(t2.ajqk_bg_nvnum, 0) + IFNULL(t2.ajqk_er_bg_nvnum, 0)
) allbgrnvs,
IFNULL(
SUM(
IFNULL(t2.ajqk_bg_allnum, 0) + IFNULL(t2.ajqk_er_bg_allnum, 0)
),
0
) - IFNULL(
SUM(
IFNULL(t2.ajqk_bg_nvnum, 0) + IFNULL(t2.ajqk_er_bg_nvnum, 0)
),
0
) allbgrnans,
SUM(
CASE
WHEN IFNULL(t2.ajqk_bg_allnum, 0) + IFNULL(t2.ajqk_er_bg_allnum, 0) <= 3
AND IFNULL(t2.ajqk_bg_allnum, 0) + IFNULL(t2.ajqk_er_bg_allnum, 0) > 0 THEN
1
ELSE
0
END
) underthree,
SUM(
CASE
WHEN IFNULL(t2.ajqk_bg_allnum, 0) + IFNULL(t2.ajqk_er_bg_allnum, 0) >= 4
AND IFNULL(t2.ajqk_bg_allnum, 0) + IFNULL(t2.ajqk_er_bg_allnum, 0) <= 6 THEN
1
ELSE
0
END
) fourtosix,
SUM(
CASE
WHEN IFNULL(t2.ajqk_bg_allnum, 0) + IFNULL(t2.ajqk_er_bg_allnum, 0) >= 7 THEN
1
ELSE
0
END
) upseven
FROM
(
SELECT
YEAR (CURDATE()) - 2 yearstr
UNION ALL
SELECT
YEAR (CURDATE()) - 1
UNION ALL
SELECT
YEAR (CURDATE())
) t1
LEFT JOIN (
SELECT
date_format(f.kssj, ‘%Y’) yearstr,
CASE
WHEN f.formtype = 1 OR f.formtype = 8 OR f.formtype = 9 THEN
SUM(
CASE
WHEN ISNULL(b.rwjyids) OR LENGTH(trim(b.rwjyids)) < 1 THEN
CHAR_LENGTH(a.chujingren) - CHAR_LENGTH(
REPLACE (a.chujingren, ‘,’, ‘’)
) + 1
ELSE
CHAR_LENGTH(b.rwjyids) - CHAR_LENGTH(REPLACE(b.rwjyids, ‘,’, ‘’)) + CHAR_LENGTH(a.chujingren) - CHAR_LENGTH(
REPLACE (a.chujingren, ‘,’, ‘’)
) + 1
END
)
WHEN ISNULL(a.chujingren) OR LENGTH(trim(a.chujingren)) < 1 THEN
0
WHEN LEFT (a.chujingren, 1) = ‘,’ OR RIGHT (a.chujingren, 1) = ‘,’ THEN
CHAR_LENGTH(a.chujingren) - CHAR_LENGTH(
REPLACE (a.chujingren, ‘,’, ‘’)
)
ELSE
CHAR_LENGTH(a.chujingren) - CHAR_LENGTH(
REPLACE (a.chujingren, ‘,’, ‘’)
) + 1
END chujingrenshu,
f.id,
f.ajqk_bg_allnum,
f.ajqk_bg_nvnum,
f.ajqk_er_bg_allnum,
f.ajqk_er_bg_nvnum
FROM
zhjw_jingliform f
LEFT JOIN zhjw_jingliformanpai a ON f.id = a.jingliformid
LEFT JOIN zhjw_jinglianpai_bg b ON f.id = b.jingliformanpaiid
WHERE
a.jingliformid IS NOT NULL
GROUP BY
f.id
) t2 ON t1.yearstr = t2.yearstr
GROUP BY
t1.yearstr
ORDER BY
t1.yearstr ASC;
t2里的group by改成GROUP BY f.id,f.formtype,f.ajqk_bg_allnum,f.ajqk_bg_nvnum,f.ajqk_er_bg_allnum,f.ajqk_er_bg_nvnum,f.kssj,a.chujingren
修改dm.ini,下面两个参数,重启数据库服务即可
COMPATIBLE_MODE = 4
GROUP_OPT_FLAG = 1
Mysql允许select后面出现不在group by后面的字段,这个是非正规的用法。DM也可以支持这种用法,需要开启COMPATIBLE_MODE=4,采用兼容mysql模式。