代码之家  ›  专栏  ›  技术社区  ›  Will

在初始表中透视多行

  •  0
  • Will  · 技术社区  · 6 年前

    我有一个表,我想旋转显示有多少类别的人是属于。。。

    enter image description here

    我想以此为中心来展示:

    enter image description here

    我已经尝试过了,但是它只显示了每一个的第一行。

    提前谢谢

    2 回复  |  直到 6 年前
        1
  •  1
  •   MEdwin    6 年前

    @威尔,这是你需要的逻辑。基本上是感兴趣列上的一个轴函数。

    DECLARE @tbl TABLE (RegNo varchar(20), Category varchar(20), Number int)
    INSERT INTO  @tbl
    SELECT 'R1050162', 'Gym', 1 UNION ALL
    SELECT 'R1050162', 'Personal Trainer', 1 UNION ALL
    SELECT 'R0093126', 'Group Exercise', 1 UNION ALL
    SELECT 'R0143614', 'Yoga Teacher', 1 
    
    
    SELECT * 
        FROM
    @tbl
    PIVOT
    (
    SUM(Number)
    FOR Category IN ([Gym], [Personal Trainer], [Group Exercise], [Yoga Teacher]
    
    )
    ) AS PivotTable;
    

    输出如下:

    enter image description here

        2
  •  1
  •   Nishant Patel    6 年前

    DECLARE @categories AS NVARCHAR(MAX),
        @your_query  AS NVARCHAR(MAX);
    
    select @categories = STUFF((SELECT distinct ',' + QUOTENAME(Category) 
                FROM your_table 
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT RegNo, ' + @categories + ' from 
                (
                    SELECT RegNo, Category, Number FROM your_table) tab
                    PIVOT
                    (
                      SUM(Number) 
                     FOR Category IN (' + @categories + ')
                ) p iv
                ORDER BY piv.RegNo'
    
    execute(@your_query)