informatica:base_de_datos:sql_server:sql_server_pivot
Tabla de Contenidos
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.
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)
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);
informatica/base_de_datos/sql_server/sql_server_pivot.txt · Última modificación: 2025/04/07 23:07 por admin