У меня проблема. Мне нужно создать новый столбец на основе значений строки. так что мой стол
id | Name | status |
-+-------+-------
1 | ANNA | M |
1 | anna | null |
2 | DIVA | null |
2 | diva | null |
на основе столбца состояния я хочу создать столбец new_status. где он проверит, является ли идентификатор одинаковым, а значение любой строки столбца состояния не равно нулю, тогда новый столбец будет иметь это ненулевое значение, иначе он будет нулевым. как на картинке ниже
id | Name | status | new_status
--+------+-------+------------
1 | ANNA | M | M
1 | anna | null | M
2 | DIVA | null | null
2 | diva | null | null
Пожалуйста, помогите мне с этим.
я использую mysql. Я пытался опубликовать данные в виде текста, но это становится очень грязным. поэтому опубликуйте его как изображение.
Два комментария, поскольку вы не предоставляете используемую СУБД:
LAST_VALUE(... IGNORE NULLS)
OLAP.sequence
внутри значений id
; Таблицы SQL по умолчанию отсортированы по нет, и тогда я бы PARTITION BY id ORDER BY sequence)
.Но иначе:
\pset null (null)
WITH
indata(id,nam,status) AS (
SELECT 1,'ANNA','M'
UNION ALL SELECT 1,'anna',NULL
UNION ALL SELECT 2,'DIVA',NULL
UNION ALL SELECT 2,'diva',NULL
)
SELECT
*
, LAST_VALUE(status IGNORE NULLS) OVER(PARTITION BY id ORDER BY nam) AS new_status
FROM indata
ORDER BY id,nam;
-- out Null display is "(null)".
-- out id | nam | status | new_status
-- out ----+------+--------+------------
-- out 1 | ANNA | M | M
-- out 1 | anna | (null) | M
-- out 2 | DIVA | (null) | (null)
-- out 2 | diva | (null) | (null)
Пожалуйста, размещайте данные в виде текста, а не изображений. Какие rdbms вы используете: mysql, sql server и т.д.?