Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 如何在多个日期行上透视表_Sql_Sql Server_Tsql_Pivot - Fatal编程技术网

Sql 如何在多个日期行上透视表

Sql 如何在多个日期行上透视表,sql,sql-server,tsql,pivot,Sql,Sql Server,Tsql,Pivot,我正在尝试透视SQL Server表,同时也按日期列进行分组 这是我的示例数据: 日期 裁判 计数 07/06/21 参考文献1 20 08/06/21 参考文献1 2. 09/06/21 参考文献1 15 07/06/21 参考文献2 54 08/06/21 参考文献2 23 您始终可以尝试这种条件聚合方法您需要动态透视查询来执行此“在下面尝试”查询 SELECT ref, [07/06/21],[08/06/21],[09/06/21] FROM (SELECT ref, date , [c

我正在尝试透视SQL Server表,同时也按日期列进行分组

这是我的示例数据:

日期 裁判 计数 07/06/21 参考文献1 20 08/06/21 参考文献1 2. 09/06/21 参考文献1 15 07/06/21 参考文献2 54 08/06/21 参考文献2 23
您始终可以尝试这种条件聚合方法

您需要动态透视查询来执行此“在下面尝试”查询

SELECT ref, [07/06/21],[08/06/21],[09/06/21] FROM
(SELECT ref, date , [count] FROM tableName) t1
PIVOT  
(  
 SUM([count]) FOR [date] IN ([07/06/21],[08/06/21],[09/06/21])) AS t2
ORDER BY t2.ref
declare @columns varchar(max)='',@sql nvarchar(max);

Create table #temp (Name nvarchar(max));

insert into #temp select distinct date from tablename

SELECT @columns+=QUOTENAME(Name) + ',' from #temp
SET @columns = LEFT(@columns, LEN(@columns) - 1);


set @sql='SELECT * FROM
(select ref,count,date from tablename) t

PIVOT(sum([count])
FOR [Dates] IN ('+@columns+')
) AS pivot_table'
EXEC (@sql)

drop table #temp

为什么不试一试呢?数据透视是一种聚合形式,所以是的,您需要一个
分组依据
。此外,如果这些日期不是一成不变的(我怀疑),你将需要一个动态的轴心。这是否回答了你的问题?这回答了你的问题吗?另外,您真的在使用SQL Server 2008吗?它已经完全不被支持2年了~。不幸的是,日期是动态的,所以在这种情况下这对我来说不起作用,但谢谢你。然后你的方式是“动态轴心”。一个好的答案提供了一个描述,以便OP可以学习,除了希望可以工作的代码。
declare @columns varchar(max)='',@sql nvarchar(max);

Create table #temp (Name nvarchar(max));

insert into #temp select distinct date from tablename

SELECT @columns+=QUOTENAME(Name) + ',' from #temp
SET @columns = LEFT(@columns, LEN(@columns) - 1);


set @sql='SELECT * FROM
(select ref,count,date from tablename) t

PIVOT(sum([count])
FOR [Dates] IN ('+@columns+')
) AS pivot_table'
EXEC (@sql)

drop table #temp