不同列获取等级数量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yenange/article/details/83757122

相关贴子:https://bbs.csdn.net/topics/392472876 

USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
	ID INT
	,姓名 NVARCHAR(10)
	,语文 NVARCHAR(10)
	,数学 NVARCHAR(10)
	,物理 NVARCHAR(10)
	,化学 NVARCHAR(10)
	,英语 NVARCHAR(10)
)
GO
INSERT INTO t
SELECT 1,'张三','优','优','良','良','差'
UNION ALL SELECT 2,'李四','差','优','优','良','差'
UNION ALL SELECT 3,'王五','差','良','良','良','差'
UNION ALL SELECT 4,'赵六','差','差','差','良','良'
GO

SELECT * 
,para/100     AS [优个数]
,para%100/10  AS [良个数]
,para%100%10  AS [差个数]
FROM (
	SELECT *,
	(
		CASE WHEN 语文 IN ('优') THEN 100 WHEN 语文 IN ('良') THEN 10 ELSE 1 END
		+
		CASE WHEN 数学 IN ('优') THEN 100 WHEN 数学 IN ('良') THEN 10 ELSE 1 END
		+
		CASE WHEN 物理 IN ('优') THEN 100 WHEN 物理 IN ('良') THEN 10 ELSE 1 END
		+
		CASE WHEN 化学 IN ('优') THEN 100 WHEN 化学 IN ('良') THEN 10 ELSE 1 END
		+
		CASE WHEN 英语 IN ('优') THEN 100 WHEN 英语 IN ('良') THEN 10 ELSE 1 END
	) AS para
	FROM t
) AS tt
/*
A:  优 大于等于 1 小于等于  2
B:  良 大于等于 1 小于等于  3
C:  差 大于等于 1 小于等于  2
*/
WHERE 
	para/100 >= 1     AND para/100 <= 2
	AND 
	para%100/10>= 1   AND para%100/10  <= 3
	AND
	para%100%10 >= 1  AND para%100%10 <= 2
	

猜你喜欢

转载自blog.csdn.net/yenange/article/details/83757122