取出重复的 ID 并识别新列
take Duplicated ID's out and Identify a new columns
我加入了 6 table 一起收集我需要的所有信息。
我想要所有的身份证、姓名、生日和种族。
某些 ID 具有 2 个或更多种族,这将导致 ID 重复。
我正在考虑编写一个子查询,或者我可以只使用一个 case 语句,因为我之前尝试过 case 语句并且适用于另一个案例,但我不能在这种情况下应用它。
我有的是:
ID NAME Birthdays Ethnicity
4000 Pedram 11/11/1999 Middle East
4001 Carlos 11/11/1920 Spanish
4001 Carlos 11/11/1920 Native American
4002 Asia 11/22/1986 Polish
4002 Asia 11/22/1986 Native American
4002 Asia 11/22/1986 White/caucassian
我想说如果有任何 Id 重复和种族不同 <> 给我这个:
ID NAME Birthdays Ethnicity
4000 Pedram 11/11/1999 Middle East
4001 Carlos 11/11/1920 Multiracial
4002 Asia 11/22/1986 multiracial
PS : 种族是不同的 table 我加入了 Person_table
PS :为了能够加入种族 table 到 Person_table 我需要加入另外 3 个 table,它们具有可以相互关联的 pr 键。
PS :我试过 CASE WHEN Count (Id) > 1 THEN 'Multiracial' ELSE Ethnicity END AS Ethnicity_2
并将所有种族识别为多种族。
任何帮助或想法将不胜感激。
SELECT
id, name, Birthdays,
IIF(COUNT(DISTINCT Ethnicity) > 1, 'Multiracial', MIN(Ethnicity)) as Ethnicity
FROM
Table
GROUP BY
id, name, Birthdays
SELECT
id, name, Birthdays,
CASE WHEN COUNT(DISTINCT Ethnicity) > 1 THEN 'Multiracial' ELSE MIN(Ethnicity) END as Ethnicity
FROM
Table
GROUP BY
id, name, Birthdays
你可以使用这个:
WITH CTE AS
(
SELECT *,
N = COUNT(*) OVER(PARTITION BY ID),
RN = ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Ethnicity)
FROM dbo.YourTable
)
SELECT ID,
NAME,
Birthdays,
CASE WHEN N > 1 THEN 'Multiracial' ELSE Ethnicity END Ethnicity
FROM CTE
WHERE RN = 1;
这个可能不是最有效的,但它确实有效。只需将您派生的 table 替换为下面的 t:
SELECT DISTINCT t.id, t.name,
CASE WHEN cnt = 1 THEN ethnicity
ELSE 'Multiracial' END AS ethnicity
FROM t
INNER JOIN
(SELECT id, COUNT(DISTINCT ethnicity) AS cnt
FROM t
GROUP BY id) sub
ON t.id = sub.id
我加入了 6 table 一起收集我需要的所有信息。 我想要所有的身份证、姓名、生日和种族。 某些 ID 具有 2 个或更多种族,这将导致 ID 重复。 我正在考虑编写一个子查询,或者我可以只使用一个 case 语句,因为我之前尝试过 case 语句并且适用于另一个案例,但我不能在这种情况下应用它。
我有的是:
ID NAME Birthdays Ethnicity
4000 Pedram 11/11/1999 Middle East
4001 Carlos 11/11/1920 Spanish
4001 Carlos 11/11/1920 Native American
4002 Asia 11/22/1986 Polish
4002 Asia 11/22/1986 Native American
4002 Asia 11/22/1986 White/caucassian
我想说如果有任何 Id 重复和种族不同 <> 给我这个:
ID NAME Birthdays Ethnicity
4000 Pedram 11/11/1999 Middle East
4001 Carlos 11/11/1920 Multiracial
4002 Asia 11/22/1986 multiracial
PS : 种族是不同的 table 我加入了 Person_table PS :为了能够加入种族 table 到 Person_table 我需要加入另外 3 个 table,它们具有可以相互关联的 pr 键。 PS :我试过 CASE WHEN Count (Id) > 1 THEN 'Multiracial' ELSE Ethnicity END AS Ethnicity_2 并将所有种族识别为多种族。
任何帮助或想法将不胜感激。
SELECT
id, name, Birthdays,
IIF(COUNT(DISTINCT Ethnicity) > 1, 'Multiracial', MIN(Ethnicity)) as Ethnicity
FROM
Table
GROUP BY
id, name, Birthdays
SELECT
id, name, Birthdays,
CASE WHEN COUNT(DISTINCT Ethnicity) > 1 THEN 'Multiracial' ELSE MIN(Ethnicity) END as Ethnicity
FROM
Table
GROUP BY
id, name, Birthdays
你可以使用这个:
WITH CTE AS
(
SELECT *,
N = COUNT(*) OVER(PARTITION BY ID),
RN = ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Ethnicity)
FROM dbo.YourTable
)
SELECT ID,
NAME,
Birthdays,
CASE WHEN N > 1 THEN 'Multiracial' ELSE Ethnicity END Ethnicity
FROM CTE
WHERE RN = 1;
这个可能不是最有效的,但它确实有效。只需将您派生的 table 替换为下面的 t:
SELECT DISTINCT t.id, t.name,
CASE WHEN cnt = 1 THEN ethnicity
ELSE 'Multiracial' END AS ethnicity
FROM t
INNER JOIN
(SELECT id, COUNT(DISTINCT ethnicity) AS cnt
FROM t
GROUP BY id) sub
ON t.id = sub.id