varios una sola resultados registros filas consulta concatenar columna cadena sql sql-server database pivot

sola - concatenar resultados de una consulta sql oracle



Tabla pivotante y columnas de concatenados (2)

Tengo una base de datos en el siguiente formato:

ID TYPE SUBTYPE COUNT MONTH 1 A Z 1 7/1/2008 1 A Z 3 7/1/2008 2 B C 2 7/2/2008 1 A Z 3 7/2/2008

¿Puedo usar SQL para convertirlo en esto?

ID A_Z B_C MONTH 1 4 0 7/1/2008 2 0 2 7/2/2008 1 0 3 7/2/2008

Entonces, TYPE , SUBTYPE se concatenan en nuevas columnas y COUNT se suma donde coinciden el ID y el MONTH .

Cualquier consejo sería apreciado. ¿Es esto posible en SQL o debería programarlo manualmente?

La base de datos es SQL Server 2005.

Supongamos que hay cientos de TYPES y SUBTYPES así que ''A'' y ''Z'' no deberían estar codificados pero generados dinámicamente.


SQL Server 2005 ofrece un operador PIVOT y UNPIVOT muy útil que le permite hacer que este código no requiera mantenimiento utilizando PIVOT y algunos códigos de generación / SQL dinámico

/* CREATE TABLE [dbo].[_159456]( [ID] [int] NOT NULL, [TYPE] [char](1) NOT NULL, [SUBTYPE] [char](1) NOT NULL, [COUNT] [int] NOT NULL, [MONTH] [datetime] NOT NULL ) ON [PRIMARY] */ DECLARE @sql AS varchar(max) DECLARE @pivot_list AS varchar(max) -- Leave NULL for COALESCE technique DECLARE @select_list AS varchar(max) -- Leave NULL for COALESCE technique SELECT @pivot_list = COALESCE(@pivot_list + '', '', '''') + ''['' + PIVOT_CODE + '']'' ,@select_list = COALESCE(@select_list + '', '', '''') + ''ISNULL(['' + PIVOT_CODE + ''], 0) AS ['' + PIVOT_CODE + '']'' FROM ( SELECT DISTINCT [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE FROM _159456 ) AS PIVOT_CODES SET @sql = '' ;WITH p AS ( SELECT ID, [MONTH], [TYPE] + ''''_'''' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT] FROM _159456 GROUP BY ID, [MONTH], [TYPE] + ''''_'''' + SUBTYPE ) SELECT ID, [MONTH], '' + @select_list + '' FROM p PIVOT ( SUM([COUNT]) FOR PIVOT_CODE IN ( '' + @pivot_list + '' ) ) AS pvt '' EXEC (@sql)


select id, sum(case when type = ''A'' and subtype = ''Z'' then [count] else 0 end) as A_Z, sum(case when type = ''B'' and subtype = ''C'' then [count] else 0 end) as B_C, month from tbl_why_would_u_do_this group by id, month

¡Usted cambia los requisitos más que nuestro equipo de marketing! Si quieres que sea dinámico, deberás recurrir a un sproc.