相关贴子: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