具有多个小计的SQL动态数据透视查询

具有多个小计的SQL动态数据透视查询,sql,tsql,Sql,Tsql,对于下面的代码,我可以使用subtotal创建一个动态透视图。但我需要在此代码中再添加一个subtotal列。它必须是NUM_to_EXIT值的总和。如图2所示,我在动态透视中使用NUM_to_在动态日期内输入,但我无法仅合并NUM_to_EXIT的总值。我什么都试过了,但是做不到。感谢您的支持。我正在使用MSSQL 2008 R2 DIRECTIONAL_METRIC_ID ZONE_ID START_TIME END_TIME RECEIVED_TS STATUS NUM_TO

对于下面的代码,我可以使用subtotal创建一个动态透视图。但我需要在此代码中再添加一个subtotal列。它必须是NUM_to_EXIT值的总和。如图2所示,我在动态透视中使用NUM_to_在动态日期内输入,但我无法仅合并NUM_to_EXIT的总值。我什么都试过了,但是做不到。感谢您的支持。我正在使用MSSQL 2008 R2

  DIRECTIONAL_METRIC_ID ZONE_ID START_TIME  END_TIME    RECEIVED_TS STATUS  NUM_TO_ENTER    NUM_TO_EXIT DAY_OF_WEEK_ID  TIME_ID
436909  254 2016-02-06 10:00:00.000 2016-02-06 10:00:00.000 2016-02-06 10:00:00.000 1   195 195 7   300
436910  254 2016-02-07 10:00:00.000 2016-02-07 10:15:00.000 2016-02-07 10:15:00.000 1   195 195 7   300
436911  278 2016-02-01 10:00:00.000 2016-02-01 10:15:00.000 2016-02-01 10:15:00.000 1   95  95  7   300
436912  278 2016-02-02 10:00:00.000 2016-02-02 10:15:00.000 2016-02-02 10:15:00.000 1   95  95  7   300
436913  278 2016-02-03 10:00:00.000 2016-02-03 10:15:00.000 2016-02-03 10:15:00.000 1   95  95  7   300

如果你发布一些示例数据,而不是屏幕快照,这可以大大简化我试图添加的数据,但我知道创建一个表格我可以做到这一点。有几个月是正确的,但我希望需求是明确的。为了消除任何假设,提供的样本数据的预期结果是什么?
DECLARE @mydate DATETIME
SELECT @mydate = GETDATE()

IF OBJECT_ID('tempdb..#Dates') IS NOT NULL
drop table #Dates


SELECT DISTINCT CONVERT(VARCHAR,START_TIME,106) AS [Date]
INTO #Dates
FROM dbo.DIRECTIONAL_METRIC
WHERE CAST(START_TIME as DATE) >=CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@mydate)-1),@mydate),101)
and CAST(START_TIME as DATE) < @mydate
AND DATEPART(HOUR,START_TIME) BETWEEN 9 AND 23
order by [Date]

DECLARE @cols VARCHAR(1000)
SELECT @cols = COALESCE (@cols + ',[' + [Date] +']','[' + [Date] + ']')
FROM #Dates


DECLARE @GrandTotalCol  NVARCHAR (MAX)
SELECT @GrandTotalCol = COALESCE (@GrandTotalCol + 'ISNULL ([' + [Date] +'],0) + ', 'ISNULL([' + [Date]+ '],0) + ')
FROM #Dates 
ORDER BY [Date]
SET @GrandTotalCol = LEFT (@GrandTotalCol, LEN (@GrandTotalCol)-1)

DECLARE @qry varchar(4000)
SET @qry =

'
DECLARE @mydate DATETIME
SELECT @mydate = GETDATE()

SELECT *, ('+ @GrandTotalCol + ') 
AS [Grand Total] INTO #temp_MatchesTotal 
FROM 
(
        SELECT ZO.CODE AS KOD,
        convert(varchar, START_TIME, 106) AS [Date],
        SUM(NUM_TO_ENTER) AS NUM_TO_ENTER
        FROM  dbo.DIRECTIONAL_METRIC AS z INNER JOIN ZONE AS ZO ON z.ZONE_ID=ZO.ZONE_ID
        WHERE CAST(START_TIME as DATE) >=CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@mydate)-1),@mydate),101)
        and CAST(START_TIME as DATE) < @mydate
        and DATEPART(HOUR,START_TIME) between 9 and 23
        AND ZO.CODE IS NOT NULL
        group by ZO.CODE,convert(varchar, START_TIME, 106)
) P
PIVOT
( 
         SUM(NUM_TO_ENTER) 
         FOR  [Date] IN(' +@cols + ')
)
 AS pvt
ORDER BY KOD
SELECT * FROM #temp_MatchesTotal 
DROP TABLE #temp_MatchesTotal'


EXEC(@qry)
GO