【问题标题】:How to convert a column into row in sql query usnig pivot [duplicate]如何使用数据透视在sql查询中将列转换为行[重复]
【发布时间】:2014-09-05 10:37:04
【问题描述】:

使用查询select Size,ColorName,QNTY from tbl1

我得到下表

现在我想得到以下格式的表格

如何使用数据透视

【问题讨论】:

    标签: sql-server pivot


    【解决方案1】:

    试试这个:

    SELECT *
    FROM (SELECT Size, ColorName, Qnty
          FROM YourTable)p
          PIVOT (SUM(Qnty) FOR Size IN ([34],[32],[30])Pvt
    

    为了获得动态数据透视,请使用以下查询:

    DECLARE @columns NVARCHAR(1000) = '',
            @sql NVARCHAR(MAX)
    
    SELECT @Columns = STUFF((SELECT ',['+Size+']'
                            FROM (SELECT DISTINCT Size FROM YourTable)z
                            FOR XML PATH('')),1,1,'')
    
    
    SET @sql = 'SELECT * 
                FROM (SELECT Size, ColorName, Qnty
                      FROM YourTable)p
                PIVOT (SUM(Qnty) FOR Size IN ('+@columns+')Pvt'
    
    EXECUTE(@sql)
    

    【讨论】:

    • 但它是 ([34],[32],[30]) 不是一个固定范围它可能会改变它可能是 [34],[32],[30],[28] ,[20]
    • 您的第二个查询适合我.. 谢谢..
    【解决方案2】:

    试试这个

    Live Demo

    方法一:

    SELECT * FROM 
    (
      SELECT Size, ColorName, Qnty
      FROM Table1
    )p
    PIVOT 
    (
     Max(Qnty) 
     FOR Size IN ([34],[32],[30])
    )Pvt
    

    方法二:

    DECLARE @QuestionList nvarchar(max);
    DECLARE @qry nvarchar(max);
    
    SELECT @QuestionList = STUFF((SELECT ',['+ CAST(Size AS nVarchar(max))+']'
                            FROM (SELECT DISTINCT Size FROM Table1)z
                            FOR XML PATH('')),1,1,'')
    
    SET @qry = 'SELECT * FROM 
                (SELECT ColorName, Qnty, Size FROM Table1
                )X PIVOT (MAX(Qnty) FOR Size IN (' + @QuestionList + ')) pvt
                ORDER BY Colorname;';
    
    Exec sp_executesql @qry;
    

    方法三:

    SELECT ColorName,
           MAX(CASE WHEN Size = 34 THEN Qnty END) AS [34],
           MAX(CASE WHEN Size = 32 THEN Qnty END) AS [32],
           MAX(CASE WHEN Size = 30 THEN Qnty END) AS [30]
    FROM Table1
    GROUP BY ColorName;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 2013-04-02
      相关资源
      最近更新 更多