Comment faire pivoter les résultats de la requête avec une colonne grand total pour chaque ligne

DECLARE @TimeByDay VARCHAR(max) SET @TimeByDay = LTRIM(RTRIM( ( SELECT QUOTENAME(REPLACE(LEFT(DATENAME(dw, TimeByDay), 3) + ', ' + CAST(TimeByDay AS varchar(11)),'''',''''''),'[') + ', ' FROM #TimesheetLineData GROUP BY TimeByDay ORDER BY TimeByDay FOR XML PATH('') ))) SET @TimeByDay = LEFT(@TimeByDay, Len(@TimeByDay) - 1) --PRINT 'columns -' + @TimeByDay; DECLARE @sql VARCHAR(MAX), @sql2 VARCHAR(MAX), @sql3 VARCHAR(MAX), @sql4 VARCHAR(MAX),@sql5 Varchar(Max),@sql6 Varchar(Max),@sql7 Varchar(Max),@sql8 Varchar(Max); SET @sql = 'SELECT *,0 As OrderID INTO ##fp_FetchTimeSheet_PWA_Data FROM (' SET @sql3 = ' SELECT ResourceName AS ResourceName , SOW , TaskName As [Task Name/Description] , ' + @TimeByDay + ' FROM ( SELECT ResourceName, SOW, TaskName, LEFT(DATENAME(dw, TimeByDay), 3) + '', '' + CAST(TimeByDay AS varchar(11)) AS TimeByDay, CAST(CAST(ActualWorkBillable as decimal(8,1)) as Varchar)+ '' h'' AS PlannedWork FROM #TimesheetLineData' SET @sql3=@sql3 + ') AS SourceTable PIVOT ( MAX(PlannedWork)' SET @sql4 = ' FOR TimeByDay IN ('+ @TimeByDay +') ) AS PivotTable ) A ORDER BY ResourceName, [Task Name/Description],SOW'; EXEC (@sql + @sql3 + @sql4) SET @sql5 = 'INSERT INTO ##fp_FetchTimeSheet_PWA_Data SELECT *,1 As OrderID FROM (' SET @sql7 = ' SELECT ResourceName , NULL As SOW , ''Total Actual Work'' As [Task Name/Description] , ' + @TimeByDay + ' FROM ( SELECT ResourceName, SOW, [Task Name/Description], LEFT(DATENAME(dw, TimeByDay), 3) + '', '' + CAST(TimeByDay AS varchar(11)) AS TimeByDay, TotalActualWork from #TimesheetLineDataSummary' set @sql7=@sql7 + ') AS SourceTable PIVOT ( MAX(TotalActualWork)' SET @sql8 = ' FOR TimeByDay IN ('+ @TimeByDay +') ) AS PivotTable )A ORDER BY ResourceName, [Task Name/Description]'; exec (@sql5 + @sql7 + @sql8) SELECT * FROM ##fp_FetchTimeSheet_PWA_Data ORDER BY ResourceName,OrderID 

J'ai la requête ci-dessus qui utilise le pivot avec des colonnes dynamics dans le cadre d'une procédure stockée. Jusqu'à présent, la requête fonctionne bien, mais ce que j'ai du mal à get pour append une colonne de total de subvention pour chaque ligne returnnée qui serait une sum des colonnes générées dynamicment (dans la variable @TimeByDay )

J'essaie de suivre un article ici https://www.codeproject.com/articles/232181/sql-pivot-with-grand-total-column-and-row mais comment, je n'arrive pas à l'get travail.

En général: Le total général est – dans la plupart des cas! – quelque chose que la couche de présentation devrait calculer.

Si vous devez le faire, vous avez deux options:

  1. Laissez votre SP returnner le SELECT tel quel et placez un autre SELECT , qui returnne une seule ligne avec toutes les SUM dont vous avez besoin. Selon l'outil que vous appelez ceci, il est possible de lire plusieurs sets de résultats avec un seul appel à un SP.

  2. Utilisez quelque chose comme ça

Le code utilise UNION ALL pour append votre total général. Le RowInx et le sorting sont nécessaires pour assurer l'ordre correct et le total général à la dernière place.

 DECLARE @tbl TABLE (ID INT IDENTITY,val1 INT, val2 INT); INSERT INTO @tbl VALUES (1,2),(3,4),(5,6); SELECT ID,val1,val2 FROM ( SELECT ROW_NUMBER() OVER(ORDER BY ID) AS RowInx, * FROM @tbl UNION ALL SELECT 1000000,NULL,SUM(val1),SUM(val2) FROM @tbl ) AS t ORDER BY t.RowInx