Oracle SQL - 删除别名结果中的空行

Oracle SQL - Remove Null rows in aliased results

嗨,开发者我正在开发一个使用 oracle sql 的小型公益项目,但我无法隐藏空结果。

Table 结构:

CREATE TABLE "church-members" (
ID NUMBER(10),
NAME varchar(30)  NOT NULL,
LOGIN varchar(20)  NOT NULL,
PASS  varchar(12)  NOT NULL,
REGISTER_YEAR_MONTH varchar(15)  NOT NULL,
USER_SCORE NUMBER(10),
PRIMARY KEY (ID));

查询:

INSERT INTO "church-members" VALUES
('1', 'John Doe', 'John', 'Xo8*d_d%f58*', '202204','1');

INSERT INTO "church-members" VALUES
('2', 'Mary Doe', 'Mary', 'dLoc&257dsew', '202203','2');

INSERT INTO "church-members" VALUES
('3', 'Robertson III', 'Robertson', 'koIIf59*Liu*', '202203','7');

INSERT INTO "church-members" VALUES
('4', 'Sonia MacDonald', 'Sonia', 'fYhfgtdjfi%', '202204','4');

INSERT INTO "church-members" VALUES
('5', 'Boris Johnston', 'Boris', 'do*&flddkIK%', '202201','2');

INSERT INTO "church-members" VALUES
('6', 'Ruth Henderson', 'Ruth', 'dF6%*&', '202202','2');

Select:

SELECT 
    ID,
    NAME,
    LOGIN,
    MAX(CASE WHEN REGISTER_YEAR_MONTH = '202203' THEN TO_CHAR(USER_SCORE) ELSE '' END) AS "MARCH SCORE",
    MAX(CASE WHEN REGISTER_YEAR_MONTH = '202204' THEN TO_CHAR(USER_SCORE) ELSE '' END) AS "APRIL SCORE "
FROM 
    "church-members" 

GROUP BY 
    ID,
    NAME,
    LOGIN

结果fiddle:

https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=a4deac5e3eefb17dca97661552458a61

我使用从这个 link: 的答案中获得的信息得到了这一点

查看 fiddle 示例,ID 为 5 和 6 的结果不应显示,因为它们都是空值。 但是仍然显示空结果...

谁能帮我解决一下?

添加一个 HAVING 子句,要求每个匹配的 ID 至少有两个月中至少一个的数据:

SELECT ID, NAME, LOGIN,
       MAX(CASE WHEN REGISTER_YEAR_MONTH = '202203' THEN TO_CHAR(USER_SCORE) END) AS "MARCH SCORE",
       MAX(CASE WHEN REGISTER_YEAR_MONTH = '202204' THEN TO_CHAR(USER_SCORE) END) AS "APRIL SCORE"
FROM "church-members"
GROUP BY ID, NAME, LOGIN
HAVING COUNT(CASE WHEN REGISTER_YEAR_MONTH IN ('202203', '202204') THEN 1 END) > 0;