У меня есть следующие записи:
Date Id Ethnicity Gender Age
-----------------------------------------------------
2021-03-25 001 NULL NULL 39
2021-03-25 001 Hispanic Male 39
2022-02-01 002 NULL NULL NULL
2022-02-01 002 Unknown Male 27
2022-02-01 002 Hispanic Male 27
2022-02-01 002 NULL Male NULL
2022-02-02 003 NULL Male Null
2022-02-02 003 White Male Null
Я хочу написать SQL-запрос на SQL Server для объединения Ethnicity
, Gender
и Age
для каждой группы Date
и ID
.
2021-03-25 001 Hispanic, Male, 39
2022-02-01 002 Hispanic, Male, 27
2022-02-02 003 White, Male
Заранее спасибо!
Я пытался использовать STRING_AGG()
для объединения этих столбцов, но данные дублируются, например, для идентификатора 002, я получил «Неизвестно, Мужчина, 27 лет, Латиноамериканец, Мужчина, 27 лет, Мужчина».
SELECT
Date, Id,
STRING_AGG(Ethnicity, ', ') AS EthnicityGenderAge
FROM
YourTableName
WHERE
Ethnicity IS NOT NULL
AND Gender IS NOT NULL
AND Age IS NOT NULL
GROUP BY
Date, Id;
Невозможно задать условие: Этническая принадлежность НЕ NULL, Пол НЕ NULL И Возраст НЕ NULL в пункте Where. Если этническая принадлежность в столбце внутри группы имеет значение null, мне все равно нужно объединить пол и возраст, если они не равны нулю.
Возможно что-то вроде этого?
SELECT CONCAT_WS(', ', MAX(NULLIF(Ethnicity, 'Unknown')), MAX(NULLIF(gender, 'Unknown')), MAX(NULLIF(age, 'Unknown')))
, Date, ID
FROM (
VALUES (N'2021-03-25', N'001', NULL, NULL, 39)
, (N'2021-03-25', N'001', N'Hispanic', N'Male', 39)
, (N'2022-02-01', N'002', NULL, NULL, NULL)
, (N'2022-02-01', N'002', N'Unknown', N'Male', 27)
, (N'2022-02-01', N'002', N'Hispanic', N'Male', 27)
, (N'2022-02-01', N'002', NULL, N'Male', NULL)
, (N'2022-02-02', N'003', NULL, N'Male', NULL)
, (N'2022-02-02', N'003', N'White', N'Male', NULL)
) t (Date,Id,Ethnicity,Gender,Age)
GROUP BY date,id
Это группирует даты и принимает максимальное значение для каждого значения, отфильтровывая неизвестные/нулевые значения. Конечно, если есть несколько ненулевых значений, это может вернуть неверные числа, но тогда вам нужно обновить вопрос, указав более подробную информацию.
Если у вас нет CONCAT_WS, вы можете использовать CONCAT с аналогичным эффектом.
Но на самом деле это не объединяет столбцы
Ethnicity
,Gender
иAge
в новый, один столбец.....