如何将给定的结构转向预期的结构?

How to pivot the given structure to expected one?

我有图片中的查询结果,对于 90 个日期也是如此,那么如何对对象进行分组并将日期列为列并计算到相应的日期。

提前致谢!!

您可以使用动态交叉表来完成:

SQL Fiddle

DECLARE @sql1 VARCHAR(4000) = ''
DECLARE @sql2 VARCHAR(4000) = ''
DECLARE @sql3 VARCHAR(4000) = ''

SELECT @sql1 = 
'SELECT
    [Object]' + CHAR(10)

SELECT @sql2 = @sql2 +
'   , MAX(CASE WHEN [Date] = CAST(''' + CONVERT(VARCHAR(8), [Date], 112) + ''' AS DATE) THEN [count] END) AS ' + QUOTENAME([Date]) + CHAR(10)
FROM(
    SELECT DISTINCT [Date] FROM tbl
)t
ORDER BY [Date]

SELECT @sql3 = 
'FROM tbl
GROUP BY [Object]
ORDER BY [Object]'

PRINT(@sql1 + @sql2 + @sql3)
EXEC (@sql1 + @sql2 + @sql3)

结果

| Object | 2015-01-01 | 2015-01-02 |
|--------|------------|------------|
|      1 |         10 |         34 |
|      2 |         20 |         46 |
|      3 |        130 |         78 |
|      4 |         40 |         89 |
|      5 |         55 |         45 |

这是 PRINT 命令的输出:

SELECT
    [Object]
    , MAX(CASE WHEN [Date] = CAST('20150101' AS DATE) THEN [count] END) AS [2015-01-01]
    , MAX(CASE WHEN [Date] = CAST('20150102' AS DATE) THEN [count] END) AS [2015-01-02]
FROM tbl
GROUP BY [Object]
ORDER BY [Object]

您可以使用 SQL 服务器 PIVOT 关系运算符

DECLARE   @SQLQuery AS NVARCHAR(MAX)
DECLARE   @PivotColumns AS NVARCHAR(MAX)

--Get unique values of pivot column  
SELECT   @PivotColumns= COALESCE(@PivotColumns + ',','') + QUOTENAME([Date])
FROM (SELECT DISTINCT [Date] FROM [dbo].[PivotExample]) AS PivotExample



--Create the dynamic query with all the values for 
--pivot column at runtime
SET   @SQLQuery = 
    N'SELECT ObjectId, ' +   @PivotColumns + '
    FROM [dbo].[PivotExample] 
    PIVOT( SUM(COUNT) 
          FOR [Date] IN (' + @PivotColumns + ')) AS P'


EXEC sp_executesql @SQLQuery