SQL Server中的高级行到列转换(透视表)

Advanced convert rows to columns (pivot) in SQL Server(SQL Server中的高级行到列转换(透视表))
本文介绍了SQL Server中的高级行到列转换(透视表)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个表:

   ---------------------------------------
   | Id | worker | workStation   | amount 
   ---------------------------------------
   | 1  | John   | Suspension    |  5
   | 2  | John   | Wheels        |  8
   | 3  | Peter  | Wheels        |  1
   | 4  | Peter  | Engines       |  2
   ---------------------------------------

我需要显示以下内容的查询:

   -------------------------------------------
   | worker  | Suspension | Wheels | Engines
   -------------------------------------------
   | John    |     5      |   8    |   NULL
   | Peter   |     NULL   |   1    |   2
   -------------------------------------------

借助 Efficiently convert rows to columns in sql server和 https://docs.microsoft.com/es-es/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver15(主要是第一个)我做到了:

   ---------------------------------
   | Suspension |  Wheels| Engines
   ---------------------------------
   |     5      |   8    |   NULL
   |     NULL   |   1    |   2
   ---------------------------------

这几乎就是我所需要的,但我仍然缺少了解工作人员名称的列。

我需要使用未知数量的工作站来透视查询。 我的代码是:

DECLARE @cols AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX)

select @cols =  STUFF((SELECT ',' + QUOTENAME(workStation)
                    FROM TableName
                    group by workStation
                    ORDER BY workStation
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = N'SELECT ' + @cols + N' from 
             (
                SELECT amount, worker, workStation
                FROM TableName
            ) x
            pivot 
            (
                max(amount)
                for workStationin (' + @cols + N')
            ) p '

exec sp_executesql @query;

我如何才能找到这一缺失的列? 提前感谢您。

推荐答案

您可以选择工作人员,如果不想重复行,可以按工作人员分组

DECLARE @cols AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX)

select @cols =  STUFF((SELECT ',' + QUOTENAME(workStation)
                FROM TableName
                group by workStation
                ORDER BY workStation
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

set @query = N'SELECT worker,' + @cols + N' from 
         (
            SELECT amount, worker, workStation
            FROM TableName
        ) x
        pivot 
        (
            max(amount)
            for workStationin (' + @cols + N')
        ) p '

exec sp_executesql @query;

这篇关于SQL Server中的高级行到列转换(透视表)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)