不同列获取等级数量

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值