SQL 查询 - 不为空

SQL query - not null

我有sql查询:

Select id
    ,MAX(CASE WHEN (pos = "10") THEN date ELSE NULL END) position10
    ,MAX(CASE WHEN (pos = "18") THEN date ELSE NULL END) position18
    ,MAX(CASE WHEN (pos = "20") THEN date ELSE NULL END) position20
    
FROM table
WHERE 
date BETWEEN "${od=2021-05-01 00:00:01}" AND "${do=2021-07-01 00:00:01}"
AND pos IN('10','18','20')
group by id

我知道了 table

id 位置10 位置20 位置30
1 2021-05-02 2021-05-02 2021-05-3
2 2021-05-15 2021-05-16 2021-05-18
3 2021-07-08

而且我想要未提取 NULL 值的行。 试试这个:

SELECT * FROM (
Select id
        ,MAX(CASE WHEN (pos = "10") THEN date ELSE NULL END) position10
        ,MAX(CASE WHEN (pos = "18") THEN date ELSE NULL END) position18
        ,MAX(CASE WHEN (pos = "20") THEN date ELSE NULL END) position20
        
    FROM table
    WHERE 
    date BETWEEN "${od=2021-05-01 00:00:01}" AND "${do=2021-07-01 00:00:01}"
    AND pos IN('10','18','20')
    group by id )T 
WHERE (position10 IS NOT NULL)
       OR (position18 IS NOT NULL)
       OR (position20 IS NOT NULL)

但它仍然为我选择 NULL 值出现在某处的位置。

您需要将 WHERE 子句中的 OR 更改为 AND

SELECT * FROM (
Select id
        ,MAX(CASE WHEN (pos = "10") THEN date ELSE NULL END) position10
        ,MAX(CASE WHEN (pos = "18") THEN date ELSE NULL END) position18
        ,MAX(CASE WHEN (pos = "20") THEN date ELSE NULL END) position20
        
    FROM table
    WHERE 
    date BETWEEN "${od=2021-05-01 00:00:01}" AND "${do=2021-07-01 00:00:01}"
    AND pos IN('10','18','20')
    group by id )T 
WHERE position10 IS NOT NULL
       AND position18 IS NOT NULL
       AND position20 IS NOT NULL