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.