SQL Server - UNPIVOT Dinámico

 
Vista:
sin imagen de perfil

UNPIVOT Dinámico

Publicado por Javier (2 intervenciones) el 24/01/2017 10:48:55
Buenos días,

Me llamo Javier y es mi primer mensaje. Estoy estudiando un master de Business Intelligence y tengo un problema ya que necesito pivotar una tabla que es cambiante cada mes. Es la siguiente:

1
2
3
4
5
6
7
CREATE TABLE `imputacion de costes` (
  `ID` varchar(255) DEFAULT NULL,
  `TRABAJADOR` varchar(255) DEFAULT NULL,
  `Salario Base` double(10,3) DEFAULT NULL,
  `BONUS` double(10,3) DEFAULT NULL,
  `A CTA CONV` double(10,3) DEFAULT NULL,
  `INCENTIVOS` double(10,3) DEFAULT NULL,

Necesito que dinamicante me genere una tabla como esta:

Sin_t_tulo

Lo he intentado y estáticamente lo he conseguido pero dinámicamente con mi poca experiencia por mucho que he buscado en google me ha sido imposible.

Gracias por anticipado a cualquier aportación.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.523
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

UNPIVOT Dinámico

Publicado por Isaias (4204 intervenciones) el 24/01/2017 17:19:41
Encontre este ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
create table temp
(
    date datetime,
    category varchar(3),
    amount money
)
 
insert into temp values ('1/1/2012', 'ABC', 1000.00)
insert into temp values ('2/1/2012', 'DEF', 500.00)
insert into temp values ('2/1/2012', 'GHI', 800.00)
insert into temp values ('2/10/2012', 'DEF', 700.00)
insert into temp values ('3/1/2012', 'ABC', 1100.00)
 
 
DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);
 
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category)
            FROM temp c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)')
        ,1,1,'')
 
set @query = 'SELECT date, ' + @cols + ' from
            (
                select date
                    , amount
                    , category
                from temp
           ) x
            pivot 
            (
                 max(amount)
                for category in (' + @cols + ')
            ) p '
 
execute sp_executesql @query
 
drop table temp
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

UNPIVOT Dinámico

Publicado por Javier (2 intervenciones) el 24/01/2017 17:26:31
Gracias! voy a intentarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar