代码之家  ›  专栏  ›  技术社区  ›  Prashant Pimpale Dila Gurung

如何在透视查询中动态添加列

  •  0
  • Prashant Pimpale Dila Gurung  · 技术社区  · 6 年前

    Name      Department  Div   Science Maths  Bio
    Prashant    CSE        A    20      NULL   NULL
    Prashant    CSE        A    NULL    50     NULL
    Lisa       CBSE        A    11      NULL   NULL
    Lisa       CBSE        A    NULL    90     NULL
    Lisa       CBSE        A    NULL    NULL   56
    

    所以我想要的是,

    Name      Department    Div Science Maths   Bio
    Prashant    CSE         A   20      50     NULL
    Lisa       CBSE         A   12      90     56
    

    SET @DynamicPivotQuery = 
        N'SELECT departmentName as Department,EmployeeCode as EmpCode,
        designationName as Designation,employeeName as EmployeeName,NatureofActivity,
           oversightCode,'+@selectCols+'
        INTO ##TempPivot
        FROM #OVERSIGHTANDCOETABLE
        PIVOT(SUM(percentage) 
              FOR name IN (' + @cols + ')) AS PVTTable PIVOT
              (
              MAX(OversightFunction) 
              FOR name1 IN (' + @displayCols + ')) AS PVTTable1'
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Tim Biegeleisen    6 年前

    WITH cte AS (
        -- your current dynamic query
    )
    
    SELECT
        Name,
        Department, 
        Div,
        MAX(Science) AS Science,
        MAX(Maths) AS Maths,
        MAX(Bio) AS Bio
    FROM cte
    GROUP BY
        Name,
        Department, 
        Div;
    
        2
  •  1
  •   Chanukya Gordon Linoff    6 年前

    你可以用 aggregate functions

     select Name,max(Department), max(Div), max(Science),max( Maths) ,max(  Bio)
        from table
        group by Name
    
        3
  •  0
  •   Prashant Pimpale Dila Gurung    6 年前
    create table temp
    (
        date datetime,
        category varchar(3),
        amount money
    )
    
    insert into temp values ('1/1/2012', 'ABC', 1000.00)
    insert into temp values ('2/1/2012', 'DEF', 500.00)
    insert into temp values ('2/1/2012', 'GHI', 800.00)
    insert into temp values ('2/10/2012', 'DEF', 700.00)
    insert into temp values ('3/1/2012', 'ABC', 1100.00)
    
    
    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX);
    
    SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category) 
                FROM temp c
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT date, ' + @cols + ' from 
                (
                    select date
                        , amount
                        , category
                    from temp
               ) x
                pivot 
                (
                     max(amount)
                    for category in (' + @cols + ')
                ) p '