如何在多个日期行上旋转 table

How to pivot table on multiple date rows

我正在尝试旋转 SQL 服务器 table,同时还按日期列分组。

这是我的示例数据:

日期 参考 计数
21 年 7 月 6 日 ref1 20
08/06/21 ref1 2
21 年 6 月 9 日 ref1 15
21 年 7 月 6 日 ref2 54
08/06/21 ref2 23

以及结果需要如何:

参考 21 年 7 月 6 日 08/06/21 21 年 6 月 9 日
ref1 20 2 15
ref2 54 23

是否可以使用 SQL 服务器 PIVOT 执行此操作,还是需要其他东西来进行分组?

日期也是动态的,并且基于日期范围。

SELECT C.REF,
SUM(
      CASE
         WHEN C.DATE='07/06/21' THEN C.COUNT ELSE 0 END
   )AS '07_06_21',
SUM(
      CASE
       WHEN C.DATE='08/06/21' THEN C.COUNT ELSE 0 END
   )AS '08_06_21',
SUM(
    CASE
       WHEN C.DATE='09/06/21' THEN C.COUNT ELSE 0 END
  )AS '09_06_21'
 FROM my_example_data AS C
 GROUP BY C.REF

您可以随时尝试这种条件聚合方法

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