执行SQL出错:No match found for function signature IF<<BOOLEAN>,<CHARACTER>,<CHARACTER>>

方便更快捷的说明问题,可以按需填写(可删除)

使用环境:5.0.0

场景、问题:

SQL如下:

SELECT
	T136.F92 AS F192,
	T136.F93 AS F193,
	T136.F94 AS F194,
	T136.F95 AS F195,
	T136.F96 AS F196,
	T136.F97 AS F197,
	T136.F98 AS F198,
	T136.F99 AS F199,
	T136.F100 AS F200,
	T136.F101 AS F201,
	T136.F102 AS F202,
	T136.F103 AS F203,
	T136.F104 AS F204,
	T136.F105 AS F205,
	T136.F106 AS F206,
	T136.F107 AS F207,
	T136.F108 AS F208,
	T136.F109 AS F209,
	T136.F110 AS F210,
	T136.F111 AS F211,
	T136.F112 AS F212,
	T136.F113 AS F213,
	T136.F114 AS F214,
	T136.F115 AS F215,
	T136.F116 AS F216,
	T136.F117 AS F217,
	T136.F118 AS F218,
	T136.F119 AS F219,
	T136.F120 AS F220,
	T136.F121 AS F221,
	T136.F122 AS F222,
	T136.F123 AS F223,
	T136.F78 AS F225 
FROM
	(
	SELECT
		AVG( T137.score * 20 ) AS F92,
		T137.diag_obj_id AS F93,
		T138.question AS F94,
		T138.q_id AS F95,
		T138.q_code AS F96,
		T138.show_seq AS F97,
		T138.GCD_name AS F98,
		T138.GCD AS F99,
		T80.diag_obj_name AS F100,
		T139.diagnostician_id AS F101,
		T139.diagnostician_name AS F102,
		T140.grade_type_id AS F103,
		T140.grade_type_name AS F104,
		T140.grade_type_show_seq AS F105,
		T140.grade_name AS F106,
		T140.grade_id AS F107,
		T141.course_id AS F108,
		T141.course_name AS F109,
		T142.subject_id AS F110,
		T142.subject_name AS F111,
		T142.subject_show_seq AS F112,
		T138.GCD_show_seq AS F113,
	IF
		(
			avg( score * 20 )< 80,
			'一般',
		IF
		( avg( score * 20 )< 90, '良', '优' )) AS F114,
		T143.subject_type AS F115,
		T140.grade_show_seq AS F116,
	IF
		(
			avg( T137.score * 20 )< 80,
			'C',
		IF
			(
				avg( T137.score * 20 )< 90,
				'B',
			IF
			( avg( T137.score * 20 )< 95, 'A', 'A+' ))) AS F117,
	IF
		(
			avg( T137.score * 20 )< 80,
			'一般',
		IF
			(
				avg( T137.score * 20 )< 90,
				'良',
			IF
			( avg( T137.score * 20 )< 95, '优', '优+' ))) AS F118,
		T137.school_code AS F119,
		T138.YZ AS F120,
		T138.YZ_name AS F121,
		T138.YZ_show_seq AS F122,
		T137.score AS F123,
		T80.show_seq AS F78 
	FROM
		v_diag_obj_subject T142
		INNER JOIN dw_diag_obj T80 ON T142.diag_obj_id = T80.diag_obj_id
		INNER JOIN dw_naire_number_answer_obj_avg T137 ON T80.diag_obj_id = T137.diag_obj_id 
		AND T80.school_code = T137.school_code 
		AND T80.school_term_id = T137.school_term_id
		INNER JOIN dw_question T138 ON T138.q_id = T137.q_id
		INNER JOIN dw_diag_module T144 ON T138.diag_module = T144.diag_module
		INNER JOIN dw_diag_obj_type T81 ON T80.diag_obj_type_id = T81.diag_obj_type_id
		INNER JOIN v_diag_obj_course T141 ON T141.diag_obj_id = T80.diag_obj_id
		INNER JOIN v_diag_obj_principal T139 ON T139.diagnostician_id = T80.diag_obj_principal_id
		INNER JOIN v_diag_obj_grade T140 ON T140.diag_obj_id = T80.diag_obj_id
		INNER JOIN dw_diag_obj_rpt_tag T145 ON T80.diag_obj_id = T145.diag_obj_id
		INNER JOIN dw_subject T146 ON T142.subject_code = T146.subject_id
		INNER JOIN v_subject_type T143 ON T143.subject_type_code = T146.subject_type_code 
	WHERE
		T80.school_code IN ( 'bjzx' ) 
		AND T80.school_term_id IN ( '2111' ) 
		AND T81.diag_obj_type_id IN ( 'XX' ) 
		AND T145.rpt_tag IN ( '全部' ) 
		AND T144.diag_module IN ( '基础诊断' ) 
	GROUP BY
		T137.diag_obj_id,
		T138.question,
		T138.q_id,
		T138.q_code,
		T138.show_seq,
		T138.GCD_name,
		T138.GCD,
		T80.diag_obj_name,
		T139.diagnostician_id,
		T139.diagnostician_name,
		T140.grade_type_id,
		T140.grade_type_name,
		T140.grade_type_show_seq,
		T140.grade_name,
		T140.grade_id,
		T141.course_id,
		T141.course_name,
		T142.subject_id,
		T142.subject_name,
		T142.subject_show_seq,
		T138.GCD_show_seq,
		T143.subject_type,
		T140.grade_show_seq,
		T137.school_code,
		T138.YZ,
		T138.YZ_name,
		T138.YZ_show_seq,
		T137.score,
		T80.show_seq 
	) T136 
ORDER BY
	F216 ASC,
	F213 ASC,
	F212 ASC,
	F205 ASC,
	F197 ASC;

你好,IF 函数在 federation 引擎中暂不支持,这个在 github上面已经有 issue 记录,感兴趣可以研究下 calcite,看下如何支持 IF 函数。

好的,我看下。。

京ICP备2021015875号