-1

我在一个表中有两列。表名是用inner join和group by构造的,我们称之为表Joined。它有两列PresentScore。如果Present是 null 那么,我想将 0 分配给该Score值。

+------------+--------+-------------+------------+--------+
| Student_Id | Course | ExamDate    |  Present   | Score  |
+------------+--------+-------------+------------+--------+
|       1    | Math   | 04/05/2020  | Yes        | 45     |
|       2    | Math   | 04/05/2020  | NULL       | 90     |
|       2    | Math   | 04/05/2020  | NULL       | 50     |                     
+------------+--------+-------------+------------+--------+

我现在所拥有的是

SELECT DISTINCT StudentID ,Course, ExamDate, Present, Score
CASE Present ISNULL
Score = 0
END
    FROM Joined

我需要不同的,因为内部连接可以给我一些重复。我需要的是

+------------+--------+-------------+------------+--------+
| Student_Id | Course | ExamDate    |  Present   | Score  |
+------------+--------+-------------+------------+--------+
|       1    | Math   | 04/05/2020  | Yes        | 45     |
|       2    | Math   | 04/05/2020  | NULL       | 0     |
+------------+--------+-------------+------------+--------+

这对我来说感觉非常非常错误,但我无法通过一个查询弄清楚如何做到这一点。我该怎么做?

4

2 回答 2

2

如果 Present 为空,那么我想将 0 分配给 Score 值。

case表达式如下:

select 
    present,
    case when present is null 
        then 0 
        else score 
    end as score
from ...

你不知道什么时候present不应该做什么 null- 所以这会返回原始的score.

目前尚不清楚您为什么需要distinct. 如果您要询问有关原始查询的问题,该查询似乎会产生(部分)重复,on 可能会帮助解决它。

于 2020-09-03T17:50:55.443 回答
1

你可以试试下面的 -

SELECT DISTINCT StudentID ,Course, ExamDate, Present, Score,
CASE when Present IS NULL
then 0 else score END as scoreval
FROM Joined
于 2020-09-03T17:37:57.923 回答