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

T-SQL如何替换拼接多列值 将周几会议安排列合并为友好展示格式

SQL Server 2016 多工作日列合并为单列解决方案

直接使用STUFF+CONCAT+CASE组合即可实现需求,不需要声明变量处理拼接逻辑,完美兼容SQL Server 2016版本:

SELECT 
    MEETING_TITLE,
    STUFF(
        CONCAT(
            CASE WHEN MONDAY = 'Y' THEN '/M' END,
            CASE WHEN TUESDAY = 'Y' THEN '/T' END,
            CASE WHEN WEDNESDAY = 'Y' THEN '/W' END,
            CASE WHEN THURSDAY = 'Y' THEN '/THU' END,
            CASE WHEN FRIDAY = 'Y' THEN '/F' END
        ),
    1, 1, '') AS MEETING_DAYS
FROM SCHEDULE;

逻辑说明

  • 每个CASE语句对应一个工作日的判断,符合Y的条件返回带前缀分隔符/的缩写,不符合则返回NULL
  • CONCAT函数会自动忽略NULL值,只会拼接符合条件的片段
  • STUFF函数去掉拼接结果开头多余的第一个/,不会出现首尾冗余分隔符的问题
    用你提供的示例数据测试,输出完全匹配预期:
MEETING_TITLEMEETING_DAYS
FOOT/THU

复杂场景扩展方案

如果实际表结构更复杂,后续需要增减工作日判断、修改缩写规则,可以用CROSS APPLY优化可维护性,避免重复写CASE逻辑:

SELECT 
    t.MEETING_TITLE,
    STUFF(STRING_AGG(d.abbr, '/') WITHIN GROUP (ORDER BY d.sort), 1, 0, '') AS MEETING_DAYS
FROM SCHEDULE t
CROSS APPLY (
    VALUES 
        (1, CASE WHEN t.MONDAY = 'Y' THEN 'M' END),
        (2, CASE WHEN t.TUESDAY = 'Y' THEN 'T' END),
        (3, CASE WHEN t.WEDNESDAY = 'Y' THEN 'W' END),
        (4, CASE WHEN t.THURSDAY = 'Y' THEN 'THU' END),
        (5, CASE WHEN t.FRIDAY = 'Y' THEN 'F' END)
) d(sort, abbr)
WHERE d.abbr IS NOT NULL
GROUP BY t.MEETING_TITLE;

后续需要调整规则只需修改VALUES里的配置项即可,不需要修改外层拼接逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:00:00