Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 无法在SQL Server 2008 R2中执行动态数据透视_Sql Server_Sql Server 2008 R2_Pivot_Dynamic Pivot - Fatal编程技术网

Sql server 无法在SQL Server 2008 R2中执行动态数据透视

Sql server 无法在SQL Server 2008 R2中执行动态数据透视,sql-server,sql-server-2008-r2,pivot,dynamic-pivot,Sql Server,Sql Server 2008 R2,Pivot,Dynamic Pivot,我需要在SQLServer2008R2中进行数据透视。我有一个EMP表,其中有员工记录,然后有一个子表,其中存储了相关的子记录 现在我想在输出中为每个员工创建一条记录。我不知道如何放置Child1Name,Child2Name,Child3Name。。。。列侧的名称。下面是示例输入和输出。蒂亚 谢谢,让我检查一下。谢谢,它对这个部分用例有效。你能再帮点忙吗?我需要以这种方式添加配偶。一个Emp可能有也可能没有多个类似配偶的孩子。那么,我们怎样才能做到呢?将内部连接更改为左外部CouthPoess

我需要在SQLServer2008R2中进行数据透视。我有一个EMP表,其中有员工记录,然后有一个子表,其中存储了相关的子记录

现在我想在输出中为每个员工创建一条记录。我不知道如何放置Child1Name,Child2Name,Child3Name。。。。列侧的名称。下面是示例输入和输出。蒂亚


谢谢,让我检查一下。谢谢,它对这个部分用例有效。你能再帮点忙吗?我需要以这种方式添加配偶。一个Emp可能有也可能没有多个类似配偶的孩子。那么,我们怎样才能做到呢?将内部连接更改为左外部CouthPoess表与子表一样好,或者将其视为子副本。然后配偶的名字也应该像spoose1name,spoose2name等出现…嗨,我仍然不能做嵌套旋转。你能展示一些示例代码吗?那将是一个很好的帮助。
    /*
    My Sql server 2012
    the code below can run at above 2005
    */
    set nocount on
    ;with EmpTable as (
                        select * 
                        from (values(1,'John'),(2,'Tim'),(3,'Steve')) as a(ID,Name)
                      ),
           ChildTable as(
                         select * 
                         from (values(1,1,'Tina'),(2,1,'Mike'),(3,2,'Mona'),(4,3,'Zane'),(5,3,'Diana'),(6,3,'Marry')) as b(ID,EmpID,Name)
                        ),
           sourceData as(
                         select a.Name,b.EmpID,b.Name as ChildName,row_number() over(partition by EmpID order by B.ID,b.Name) as rn
                         from EmpTable as a inner join ChildTable as b on a.ID = b.EmpID

                        )
          select EmpID,Name,[1] as Child1Name,[2] as Child2Name,[3] as Child3Name
          from sourceData as  a pivot (max(ChildName) for rn in([1],[2],[3]))as b
    /*
    EmpID       Name  Child1Name Child2Name Child3Name
    ----------- ----- ---------- ---------- ----------
    1           John  Tina       Mike       NULL
    2           Tim   Mona       NULL       NULL
    3           Steve Zane       Diana      Marry
    */   



/*
Dynamic  pivoting
My Sql server 2012
the code below can run at above 2005
*/
--step 1 :
set nocount on
;with EmpTable as (
                    select * 
                    from (values(1,'John'),(2,'Tim'),(3,'Steve')) as a(ID,Name)
                  ),
       ChildTable as(
                     select * 
                     from (values(1,1,'Tina'),(2,1,'Mike'),(3,2,'Mona'),(4,3,'Zane'),(5,3,'Diana'),(6,3,'Marry')) as b(ID,EmpID,Name)
                    ),
       sourceData as(
                     select a.Name,b.EmpID,b.Name as ChildName,row_number() over(partition by EmpID order by B.ID,b.Name) as rn
                     from EmpTable as a inner join ChildTable as b on a.ID = b.EmpID

                    )
      select * into #a
      from sourceData 

--Step 2: 
      declare @PivotColumn as varchar(5000),@DisplayColumn as varchar(5000),@Sql as nvarchar(4000)
     ;with columnData as ( select distinct rn from #a)
      select  @PivotColumn = isnull(@PivotColumn,'')+quotename(cast(rn as varchar))+',',@DisplayColumn= isnull(@DisplayColumn,'')+quotename(cast(rn as varchar))+' as Child'+cast(rn as varchar)+'Name,'
      from columnData
      set @PivotColumn = left(@PivotColumn,len(@PivotColumn)-1)
      set @DisplayColumn = left(@DisplayColumn,len(@DisplayColumn)-1)
     set @Sql = 'select EmpID,Name,'+@DisplayColumn+' from #a as a pivot(max(ChildName) for rn in ('+@PivotColumn+')) as b'

     exec sp_executesql @sql
/*
EmpID       Name  Child1Name Child2Name Child3Name
----------- ----- ---------- ---------- ----------
1           John  Tina       Mike       NULL
2           Tim   Mona       NULL       NULL
3           Steve Zane       Diana      Marry
*/