代码之家  ›  专栏  ›  技术社区  ›  zbx888

查询以连接每组中的行数据

  •  0
  • zbx888  · 技术社区  · 2 年前

    我有以下记录:

    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 Server中编写一个SQL查询,以连接 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() 连接这些列,但数据是重复的,例如ID 002,我得到了“未知,男性,27,西班牙裔,男,27,男性”

    2 回复  |  直到 2 年前
        1
  •  1
  •   siggemannen    2 年前

    也许是这样的?

    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
    

    这会对日期进行分组,并取每个值的最大值,同时过滤掉未知值/null值。当然,如果有几个非空值,这可能会返回不正确的数字,但您需要更新问题的更多细节。

    如果没有CONCAT_WS,则可以使用具有类似效果的CONCAT。

        2
  •  -1
  •   marc_s MisterSmith    2 年前
    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;