请教一个行列互换的写法

有大哥大姐能帮忙写个例子吗?

image.png

FineReport 7kitV3l8 发布于 2024-10-28 09:00
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
CD20160914Lv8专家互助
发布于2024-10-28 09:01(编辑于 2024-10-28 09:13)

SELECT 姓名, 考试类型, [数学], [英语], [物理], [化学]

FROM (

    SELECT 姓名, 科目, 考试类型, 成绩

    FROM Scores

    UNPIVOT (

        成绩 FOR 考试类型 IN ([期初考试], [期中考试], [期末考试])

    ) AS UnpivotedScores

) AS SourceData

PIVOT (

    MAX(成绩)

    FOR 科目 IN ([数学], [英语], [物理], [化学])

) AS PivotTable;

数据源

image.png

查询结果

image.png

以下是动态的sql,存储过程

DECLARE @Cols NVARCHAR(MAX), @Sql NVARCHAR(MAX);

-- 获取所有科目名称并生成列名列表

SELECT @Cols = STRING_AGG(QUOTENAME(科目), ', ')

FROM (SELECT DISTINCT 科目 FROM Scores) AS Subjects;

-- 构建动态SQL语句

SET @Sql = N'

SELECT 姓名, 考试类型, ' + @Cols + '

FROM (

    SELECT 姓名, 科目, 考试类型, 成绩

    FROM Scores

    UNPIVOT (

        成绩 FOR 考试类型 IN ([期初考试], [期中考试], [期末考试])

    ) AS UnpivotedScores

) AS SourceData

PIVOT (

    MAX(成绩)

    FOR 科目 IN (' + @Cols + ')

) AS PivotTable;';

-- 执行动态SQL

EXEC sp_executesql @Sql;

image.png

  • 7kitV3l8 7kitV3l8(提问者) 期初考试, 期中考试, 期末考试这3个参数在哪里看?
    2024-10-28 09:08 
  • CD20160914 CD20160914 回复 7kitV3l8(提问者) 上面语句修改了。你自己看。。
    2024-10-28 09:10 
  • 2关注人数
  • 145浏览人数
  • 最后回答于:2024-10-28 09:13
    请选择关闭问题的原因
    确定 取消
    返回顶部