Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 2005针对要插入到表中的动态表的透视_Sql_Sql Server_Pivot Table - Fatal编程技术网

SQL Server 2005针对要插入到表中的动态表的透视

SQL Server 2005针对要插入到表中的动态表的透视,sql,sql-server,pivot-table,Sql,Sql Server,Pivot Table,我有一个查询,它创建一个动态表,并创建假列和假行,以便在SSRS报告中填充网格 Declare @FieldLogID as int Set @FieldLogID = 1018; With EmployeeActivity as ( SELECT distinct *, row_number() over(order by Employee_EmployeeID)as row from ( Select Employee_EmployeeID, Employee_FullName

我有一个查询,它创建一个动态表,并创建假列和假行,以便在SSRS报告中填充网格

Declare @FieldLogID as int
Set @FieldLogID = 1018;

With EmployeeActivity as
(
SELECT distinct *, row_number() over(order by Employee_EmployeeID)as row
 from
    (

Select Employee_EmployeeID,
Employee_FullName,
Injured_Today_Custom,
--Case when JobAccount_TrackingID like'zzz%' then Null else JobAccount_TrackingID end as 
JobAccount_TrackingID,
StartDateTime, 
StopDateTime, 
WorkHours
from 
(
Select row_number() over (partition by Employee_EmployeeID order by JobAccount_TrackingID) row,*
from 
(
SELECT DISTINCT
CustomizedFieldLogEmployee_1.Employee_EmployeeID, 
CustomizedFieldLogEmployee_1.Employee_FullName, 
NULL as Injured_Today_Custom, 
CustomizedFieldLogJobAccount_1.JobAccount_TrackingID, 
null as StartDateTime, 
null as StopDateTime, 
null as WorkHours
FROM
CustomizedAccount INNER JOIN CustomizedFieldLogJobAccount AS CustomizedFieldLogJobAccount_1 ON CustomizedAccount.AccountID = CustomizedFieldLogJobAccount_1.Account_AccountID 
RIGHT OUTER JOIN CustomizedFieldLogEmployee AS CustomizedFieldLogEmployee_1 ON CustomizedFieldLogJobAccount_1.FieldLog_FieldLogID = CustomizedFieldLogEmployee_1.FieldLog_FieldLogID
WHERE        
CustomizedFieldLogEmployee_1.FieldLog_FieldLogID = @FieldLogID 
AND 
CustomizedAccount.AppliesToEmployees = 1
Union
(Select 'aaaa01' EmployeeID,NULL,NULL,NULL,NULL,NULL,NULL
        union Select 'aaaa02',NULL,NULL,NULL,NULL,NULL,NULL
        union Select 'aaaa03',NULL,NULL,NULL,NULL,NULL,NULL
        union Select 'aaaa04',NULL,NULL,NULL,NULL,NULL,NULL
        union Select 'aaaa05',NULL,NULL,NULL,NULL,NULL,NULL)
Union
Select Distinct 
Employee_EmployeeID,
Employee_FullName,
null as Injured_Today_Custom,
fake_TrackingID,
null as StartDateTime, 
null as StopDateTime, 
null as WorkHours
FROM
CustomizedFieldLogEmployee
cross join
(
Select 'zzz01' fake_TrackingID
union Select 'zzz02' 
union Select 'zzz03' 
union Select 'zzz04' 
union Select 'zzz05' 
union Select 'zzz06' 
union Select 'zzz07' 
union Select 'zzz08' 
union Select 'zzz09' 
union Select 'zzz10' 
) a where FieldLog_FieldLogID = @FieldLogID
) b 
) c where Row<=9
--order by Employee_EmployeeID,JobAccount_TrackingID
)d
);

Select * from EmployeeActivity
执行导致错误的SQL:

EXEC dynamic_pivot
   'SELECT Employee_EmployeeID, Employee_FullName,StartDateTime from EmployeeActivity',
   'JobAccount_TrackingID',
   'Count(row)'
现在,我没有绑定到这个函数来透视数据,但是有一件事阻止我进行标准透视,那就是直到运行时我才知道组成列的值


这样做的最佳方式是什么?

您的动态透视是基于实际的表,而不是
通用表表达式(您使用
WITH
关键字定义的)。一个简单的解决方案是用CTE制作一个真正的表格

在顶部,添加

if object_id('tempdb..#EmployeeActivity') is not null
drop table #EmployeeActivity;
在查询结束时,将
添加到#EmployeeActivity
子句中:

Select *
into #EmployeeActivity
from EmployeeActivity;
你的动态轴心应该工作。注意:我认为
需要在选择列表中

EXEC dynamic_pivot
'SELECT Employee_EmployeeID, Employee_FullName,StartDateTime,row from EmployeeActivity',
'JobAccount_TrackingID',
'Count(row)'
EXEC dynamic_pivot
'SELECT Employee_EmployeeID, Employee_FullName,StartDateTime,row from EmployeeActivity',
'JobAccount_TrackingID',
'Count(row)'