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

SQL Server条件字符串拼接:考试结果按Result(Score)格式合并

解决方案:SQL Server 考试结果格式拼接

针对你的需求,我们可以通过条件聚合精准获取同一PersonID和ResultDate下的Result与Score值,再拼接成指定格式。以下是具体实现:

方法1:条件聚合(推荐,逻辑直观)

利用CASE WHEN在分组时分别提取Result和Score的CategoryValue,再通过CONCAT拼接成目标格式:

SELECT
    PersonID,
    Name,
    ResultDate,
    CONCAT(
        MAX(CASE WHEN CategoryName = 'Result' THEN CategoryValue END),
        '(',
        MAX(CASE WHEN CategoryName = 'Score' THEN CategoryValue END),
        ')'
    ) AS ResultWithScore
FROM
    你的表名
GROUP BY
    PersonID, Name, ResultDate
ORDER BY
    PersonID, ResultDate;

代码说明:

  • MAX(CASE WHEN ...):在PersonID+Name+ResultDate分组下,筛选出对应CategoryName的唯一值(每个分组下每种CategoryName仅出现一次,用MAX/MIN/SUM均可,这里用MAX是常规习惯)
  • CONCAT:将Result值、括号、Score值拼接成Result(Score)格式
  • GROUP BY:按用户+考试日期分组,确保每个考试记录只输出一行

方法2:PIVOT转列后拼接

先通过PIVOT将CategoryName转成列,再进行拼接:

WITH PivotedData AS (
    SELECT
        PersonID,
        Name,
        ResultDate,
        Result,
        Score
    FROM
        你的表名
    PIVOT (
        MAX(CategoryValue)
        FOR CategoryName IN (Result, Score)
    ) AS PivotTable
)
SELECT
    PersonID,
    Name,
    ResultDate,
    CONCAT(Result, '(', Score, ')') AS ResultWithScore
FROM
    PivotedData
ORDER BY
    PersonID, ResultDate;

最终结果展示

执行上述任意语句后,会得到如下结果:

PersonIDNameResultDateResultWithScore
569A2015-11-10Passed(16)
585B2015-11-09Failed(8)
585B2020-03-01Passed(10)

为什么STRING_AGG没成功?

STRING_AGG的作用是将分组内的多行值拼接成逗号分隔的字符串,但你的需求是提取特定两行的值并按固定格式拼接,并非合并所有行,所以用条件聚合或PIVOT更匹配场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:35:23