【发布时间】:2021-07-08 13:16:42
【问题描述】:
我有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
我有这张桌子
| id | position10 | position20 | position30 |
|---|---|---|---|
| 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 | NULL |
而且我想要不拾取 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 值出现在某处的位置。
【问题讨论】:
-
在哪里(位置 10 不为空)和(位置 18 不为空)和(位置 20 不为空)
-
用 AND 替换 OR?
-
天哪,我很愚蠢 :D 我什至没有给我这里的问题。谢谢