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

SQL如何将同用户多行课程数据合并为单行多列输出

解决思路

你当前的代码每次查询到1条课程就插入1行,所以会生成多行数据。要实现多课程合并到同一行的c1-c4列,需要先给课程按顺序编号,再通过行转列逻辑把不同编号的课程映射到对应列,最终仅插入1行数据即可。

修改后代码

DECLARE @FirstName NVARCHAR(50) = 'Förnamn'
DECLARE @LastName NVARCHAR(50) = 'Efternamn'

INSERT INTO @table (FirstName, Lastname, c1, c2, c3, c4)
SELECT 
    @FirstName,
    @LastName,
    MAX(CASE WHEN rn = 1 THEN courseVal END) AS c1,
    MAX(CASE WHEN rn = 2 THEN courseVal END) AS c2,
    MAX(CASE WHEN rn = 3 THEN courseVal END) AS c3,
    MAX(CASE WHEN rn = 4 THEN courseVal END) AS c4
FROM (
    SELECT 
        CONCAT(Kurs, '/', Period) AS courseVal,
        -- 可自定义ORDER BY规则调整课程填充到c1-c4的先后顺序
        ROW_NUMBER() OVER (ORDER BY Kurs, Period) AS rn 
    FROM getFourCoursesByYear(@year)
) AS course_list

逻辑说明

  • 内层子查询为getFourCoursesByYear返回的每门课程生成从1开始的连续序号rn,你可以调整OVER子句里的ORDER BY规则,控制课程填充到c1、c2等列的先后顺序
  • 外层查询通过CASE条件匹配序号,配合MAX聚合函数提取对应序号的课程值填充到对应列,没有对应序号的课程自动返回NULL,最终仅返回1行数据插入目标表,即可得到你需要的合并效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 01:33:02