Sql server SQL将列转换为行

Sql server SQL将列转换为行,sql-server,sql-server-2008-r2,pivot,cross-apply,Sql Server,Sql Server 2008 R2,Pivot,Cross Apply,我有一个三列18行的表格。 我想换成18列两行。 这是桌子 Category Bands Points 20_CAT1 21-22 10 20_CAT2 23-25 20 20_CAT3 26- 30 30_CAT1 31-33 10 30_CAT2 34-38 20 30_CAT3 39- 30 40_CAT1 41-44 5 40_CAT2 45-50 15 40_CAT3 51- 25

我有一个三列18行的表格。 我想换成18列两行。 这是桌子

Category Bands Points 20_CAT1 21-22 10 20_CAT2 23-25 20 20_CAT3 26- 30 30_CAT1 31-33 10 30_CAT2 34-38 20 30_CAT3 39- 30 40_CAT1 41-44 5 40_CAT2 45-50 15 40_CAT3 51- 25 50_CAT1 50-55 5 50_CAT2 56-63 15 50_CAT3 64- 25 60_CAT1 61-66 5 60_CAT2 67-75 20 60_CAT3 76- 30 70_CAT1 71-77 5 70_CAT2 78-88 20 70_CAT3 89- 30 类别组别及分数 20_CAT1 21-22 10 20_CAT2 23-25 20 20_CAT3 26-30 30_CAT1 31-33 10 30_CAT2 34-38 20 30_CAT3 39-30 40_CAT1 41-44 5 40_CAT2 45-50 15 40_CAT3 51-25 50_CAT1 50-55 5 50_CAT2 56-63 15 50_CAT3 64-25 60_CAT1 61-66 5 60_CAT2 67-75 20 60_CAT3 76-30 70_CAT1 71-77 5 70_CAT2 78-88 20 70_CAT3 89-30 新表的列应该是“Category”,行应该是“Bands”和“Points”

我不知道如何使用交叉应用和枢轴来实现这一点,甚至不知道这是否是正确的方法


提前感谢。

我成功地在不使用枢轴的情况下实现了以下功能

        SELECT
        MAX(CASE WHEN Category = '20_CAT1' THEN Bands END) [20_CAT1_Bands],
        MAX(CASE WHEN Category = '20_CAT1' THEN Points END) [20_CAT1_Points],
        MAX(CASE WHEN Category = '20_CAT2' THEN Bands END) [20_CAT2_Bands],
        MAX(CASE WHEN Category = '20_CAT2' THEN Points END) [20_CAT2_Points],
        MAX(CASE WHEN Category = '20_CAT3' THEN Bands END) [20_CAT3_Bands],
        MAX(CASE WHEN Category = '20_CAT3' THEN Points END) [20_CAT3_Points],

        MAX(CASE WHEN Category = '30_CAT1' THEN Bands END) [30_CAT1_Bands],
        MAX(CASE WHEN Category = '30_CAT1' THEN Points END) [30_CAT1_Points],
        MAX(CASE WHEN Category = '30_CAT2' THEN Bands END) [30_CAT2_Bands],
        MAX(CASE WHEN Category = '30_CAT2' THEN Points END) [30_CAT2_Points],
        MAX(CASE WHEN Category = '30_CAT3' THEN Bands END) [30_CAT3_Bands],
        MAX(CASE WHEN Category = '30_CAT3' THEN Points END) [30_CAT3_Points],

        MAX(CASE WHEN Category = '40_CAT1' THEN Bands END) [40_CAT1_Bands],
        MAX(CASE WHEN Category = '40_CAT1' THEN Points END) [40_CAT1_Points],
        MAX(CASE WHEN Category = '40_CAT2' THEN Bands END) [40_CAT2_Bands],
        MAX(CASE WHEN Category = '40_CAT2' THEN Points END) [40_CAT2_Points],
        MAX(CASE WHEN Category = '40_CAT3' THEN Bands END) [40_CAT3_Bands],
        MAX(CASE WHEN Category = '40_CAT3' THEN Points END) [40_CAT3_Points],

        MAX(CASE WHEN Category = '50_CAT1' THEN Bands END) [50_CAT1_Bands],
        MAX(CASE WHEN Category = '50_CAT1' THEN Points END) [50_CAT1_Points],
        MAX(CASE WHEN Category = '50_CAT2' THEN Bands END) [50_CAT2_Bands],
        MAX(CASE WHEN Category = '50_CAT2' THEN Points END) [50_CAT2_Points],
        MAX(CASE WHEN Category = '50_CAT3' THEN Bands END) [50_CAT3_Bands],
        MAX(CASE WHEN Category = '50_CAT3' THEN Points END) [50_CAT3_Points],

        MAX(CASE WHEN Category = '60_CAT1' THEN Bands END) [60_CAT1_Bands],
        MAX(CASE WHEN Category = '60_CAT1' THEN Points END) [60_CAT1_Points],
        MAX(CASE WHEN Category = '60_CAT2' THEN Bands END) [60_CAT2_Bands],
        MAX(CASE WHEN Category = '60_CAT2' THEN Points END) [60_CAT2_Points],
        MAX(CASE WHEN Category = '60_CAT3' THEN Bands END) [60_CAT3_Bands],
        MAX(CASE WHEN Category = '60_CAT3' THEN Points END) [60_CAT3_Points],

        MAX(CASE WHEN Category = '70_CAT1' THEN Bands END) [70_CAT1_Bands],
        MAX(CASE WHEN Category = '70_CAT1' THEN Points END) [70_CAT1_Points],
        MAX(CASE WHEN Category = '70_CAT2' THEN Bands END) [70_CAT2_Bands],
        MAX(CASE WHEN Category = '70_CAT2' THEN Points END) [70_CAT2_Points],
        MAX(CASE WHEN Category = '70_CAT3' THEN Bands END) [70_CAT3_Bands],
        MAX(CASE WHEN Category = '70_CAT3' THEN Points END) [70_CAT3_Points]

    FROM @table

由于Category列和Bands列都有1对1的映射,因此看起来这两个列都是多余的。Thank M Ali,I'M的可能重复,正在与示例中的语法以及如何将其应用于我的问题进行斗争。如果您需要进一步的帮助,我们将不胜感激。这几乎是您希望重点解决两个问题的唯一解决方案。