You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中如何将用户单状态列转为多标志列并去除重复用户行

SQL Server实现方案

假设你的源表名为User_Status,包含User_ID和Status两列,以下两种方式都可以得到你需要的结果:

方案1:CASE表达式 + GROUP BY聚合(推荐,逻辑清晰兼容性高)

SELECT
    User_ID,
    Healthy = CASE WHEN COUNT(CASE WHEN Status IN ('Healthy', 'Sick') THEN 1 END) > 0 THEN 'Yes' ELSE 'No' END,
    Rich = CASE WHEN COUNT(CASE WHEN Status = 'Rich' THEN 1 END) > 0 THEN 'Yes' ELSE 'No' END,
    Studied = CASE WHEN COUNT(CASE WHEN Status = 'Studied' THEN 1 END) > 0 THEN 'Yes' ELSE 'No' END
FROM User_Status
GROUP BY User_ID
ORDER BY User_ID;

逻辑说明:按User_ID分组后,对每个用户的状态做匹配计数,符合对应条件的计数大于0则说明存在对应属性,返回Yes,否则返回No。

方案2:PIVOT行转列运算符实现

SELECT
    User_ID,
    Healthy = CASE WHEN ISNULL(Healthy, 0) + ISNULL(Sick, 0) > 0 THEN 'Yes' ELSE 'No' END,
    Rich = ISNULL(Rich, 'No'),
    Studied = ISNULL(Studied, 'No')
FROM (
    SELECT User_ID, Status, 'Yes' AS Flag
    FROM User_Status
) AS SourceTable
PIVOT (
    MAX(Flag)
    FOR Status IN ([Healthy], [Sick], [Rich], [Studied])
) AS PivotTable
ORDER BY User_ID;

逻辑说明:先给源数据新增固定值为Yes的标志列,通过PIVOT运算符将Status的不同取值转为列,无对应状态的列值为NULL,最后通过判断将NULL替换为No、同时合并健康相关状态的结果即可。

内容的提问来源于stack exchange,提问作者Taif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:06:02