[英]How to nest logic in a case block of sql
我有一张桌子,上面有学生的考试成绩。 每种测试类型的得分都可以超过1分。 因此,学生A的测验1可以有多个分数,测验2可以具有一个分数,依此类推。
基本上,如果一个学生只有测验1的测验分数,我想做x。 如果一个学生的测验1的测验分数多个,我想做y。 我该怎么做?
到目前为止,我的查询是:
SELECT A.*
,T.TestType
,CASE
WHEN T.TestType = 'test_1' THEN T.MessageLocation
END AS Loc
FROM #Person A
LEFT JOIN #TestScores T ON A.TestID = T.ID
但是我想做的(伪代码)是:
SELECT A.*
,T.TestType
,CASE
-- when count(test_1) = 1 THEN T.MessageLocation
-- when count(test_1) > 1 THEN
-- for each row T.AltMessageLocation
END AS Loc
FROM #Person A
LEFT JOIN #TestScores T ON A.TestID = T.ID
您首先需要通过ResrID和TestType聚合数据,然后将结果添加到现有查询中。 假设您正在使用SQL Server,它将类似于:
;WITH cteTestNum(
SELECT T.ID,T.TestType,COUNT(*) AS TestNum
FROM #Person A
INNER JOIN #TestScores T
ON A.TestID = T.ID
GROUP BY T.ID,T.TestType
)
SELECT A.*
,T.TestType
,CASE
WHEN ISNULL(N.TestType,N'') = 'test_1' AND ISNULL(N.TestNum,0)>1 THEN T.MessageLocation
WHEN ISNULL(N.TestType,N'') = 'test_1' AND ISNULL(N.TestNum,0)>1 THEN T.AltMessageLocation
ELSE N'' -- no tests
END AS Loc
FROM #Person A
LEFT JOIN #TestScores T
ON A.TestID = T.ID
LEFT JOIN cteTestNum N
ON N.ID=T.ID
AND N.TestType=T.TestType;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.