====== SQL SERVER PIVOT ====== excelente explicacion: [[https://blogs.msdn.microsoft.com/kenobonn/2009/03/22/pivot-on-two-or-more-fields-in-sql-server/]] WITH Src AS ( SELECT * FROM (VALUES ('1/10/2016', 'abc11', 'teamA', 'ID_1 ', 292, 3), ('1/11/2016', 'abc11', 'teamA', 'ID_1 ', 300, 0), ('1/10/2016', 'abc11', 'teamA', 'ID_10', 100, 0), ('1/11/2016', 'abc11', 'teamA', 'ID_10', 84, 0), ('1/10/2016', 'abc11', 'teamA', 'ID_11', 11, 0), ('1/11/2016', 'abc11', 'teamA', 'ID_11', 12, 0) )T(MTH, ID, TEAM, Metric_ID, Score, Outcome_Score) ) SELECT * FROM ( SELECT ID, TEAM, Metric_ID, Value, CASE WHEN DATEPART(M, MTH)=10 THEN 'Oct_' WHEN DATEPART(M, MTH)=11 THEN 'Nov_' END+Col ToPivot FROM (SELECT CONVERT(date, MTH, 103) MTH, ID, TEAM, Metric_ID, Score, Outcome_Score FROM Src) T1 UNPIVOT (Value FOR Col IN (Score, Outcome_Score)) U1 ) T PIVOT (SUM(Value) FOR ToPivot IN (Oct_Score, Oct_Outcome_Score, Nov_Score, Nov_Outcome_Score)) P [[https://stackoverflow.com/questions/39739230/tsql-pivot-multiple-columns]] [[https://stackoverflow.com/questions/31855778/pivot-on-multiple-columns-t-sql]] Multiple Pivots encadenado [[https://stackoverflow.com/questions/38067490/in-sql-server-how-to-pivot-for-multiple-columns]] [[https://dba.stackexchange.com/questions/192524/how-to-pivot-on-multiple-columns-in-sql-server]] ===== NOTAS ===== -- INTERESANTE, TABLA SIN DECLARARLA SELECT * FROM (VALUES ('1/10/2016', 'abc11', 'teamA', 'ID_1 ', 292, 3), ('1/11/2016', 'abc11', 'teamA', 'ID_1 ', 300, 0), ('1/10/2016', 'abc11', 'teamA', 'ID_10', 100, 0), ('1/11/2016', 'abc11', 'teamA', 'ID_10', 84, 0), ('1/10/2016', 'abc11', 'teamA', 'ID_11', 11, 0), ('1/11/2016', 'abc11', 'teamA', 'ID_11', 12, 0) )T(MTH, ID, TEAM, Metric_ID, Score, Outcome_Score) ==== Pivot incompatibilidad ==== En una DB me salio: Msg 325, Level 15, State 1, Line 31 Incorrect syntax near 'PIVOT'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the SET COMPATIBILITY_LEVEL option of ALTER DATABASE. * [[https://stackoverflow.com/questions/25860469/is-pivot-supported-with-compatibility-level-80]] Para ver la compatibilidad de la DB SELECT @@version; SELECT compatibility_level FROM sys.databases WHERE name = 'db_name'; ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = 100 -- (mant estaba en 80 antes) * [[https://stackoverflow.com/questions/21483372/incorrect-syntax-near-pivot]] ===== PIVOT con Columnas dinamicas ====== DECLARE @ColumnsTable TABLE ([ColumnName] VARCHAR(50)); INSERT INTO @ColumnsTable ([ColumnName]) SELECT DISTINCT '[' + CONVERT(VARCHAR(48), [ITEM_HEAD_ID]) + ']' FROM [Table]; DECLARE @PivotColumns VARCHAR(MAX), @TotalColumn VARCHAR(MAX), @SQL VARCHAR(MAX); SET @PivotColumns = (SELECT STUFF((SELECT DISTINCT ', ' + CONVERT(VARCHAR(50), [ColumnName]) FROM @ColumnsTable FOR XML PATH('')), 1, 2, '')); SET @TotalColumn = (SELECT STUFF((SELECT DISTINCT ' + ISNULL(' + CONVERT(VARCHAR(50), [ColumnName]) + ', 0)' FROM @ColumnsTable FOR XML PATH('')), 1, 3, '')); SET @SQL = 'SELECT *, (' + @TotalColumn + ') AS [Total] FROM (SELECT [TRXID], [ITEM_HEAD_ID], [ITEM_HEAD_AMT] FROM [Table]) AS t PIVOT (MAX([ITEM_HEAD_AMT]) FOR [ITEM_HEAD_ID] IN (' + @PivotColumns + ')) AS p;'; EXEC(@SQL); * [[https://www.codeproject.com/Questions/761828/How-to-create-a-pivot-query-in-sql-server-without]]