Pivot con case, filas duplicadas

12/03/2008 - 15:13 por Eva | Informe spam
Hola a Todos

Tengo un problema (seguro que tonto) pero no llego a verlo.

Parto de la siguiente tabla:

(adjunto Picture0001)

Hago una select tal que:

select a.codigoempresa, a.ccoste,
importeact = case A.idperiodo
when 1 then A.importe
else 0
end,
importeant = case A.idperiodo
when 3 then A.importe
else 0
end
from MiTAbla as A

Y obtengo esto:

(adjunto Picture0002)

No entiendo por qué me está generando dos registros por cada
(codigoempresa-ccoste).

Cualquier ayuda es binvenida :)

Gracias, un saludo

Eva.
 

Leer las respuestas

#1 jcac
12/03/2008 - 16:02 | Informe spam
Hola Eva,

Espero esto te ayude:

create table #tmp (idPeriodo int, CodigoEmpresa char(3), CCOSTE char(5),
Importe decimal(20,4), Cantidad decimal(20,4))
go
insert into #tmp values (1, '001', 'C2011', 338524.75, 55341.6)
insert into #tmp values (3, '001', 'C2011', 227411.62, 42956.43)
insert into #tmp values (1, '001', 'C2012', 172360.11, 23674.24)
insert into #tmp values (3, '001', 'C2012', 139583.84, 21141.47)
insert into #tmp values (1, '001', 'M0011', 419019.89, 6114.75)
insert into #tmp values (3, '001', 'M0011', 391668.63, 5902)
insert into #tmp values (1, '001', 'M0012', 144324.01, 2583.5)
insert into #tmp values (3, '001', 'M0012', 181187.40, 3333.5)
insert into #tmp values (1, '001', 'M0013', 339883.06, 5381)
insert into #tmp values (3, '001', 'M0013', 216983.91, 3422.5)
go
select a.codigoempresa, a.ccoste,
sum(case A.idperiodo when 1 then A.importe else 0 end) as importeact,
sum(case A.idperiodo when 3 then A.importe else 0 end) as importeant
from #tmp as A
group by a.codigoempresa, a.ccoste
go
select * from #tmp
go
drop table #tmp
go

Saludos

Juan Carlos Alemán

"Eva" escribió en el mensaje
news:
Perdón, se me escapó sin los archivos.

"Eva" escribió en el mensaje
news:
Hola a Todos

Tengo un problema (seguro que tonto) pero no llego a verlo.

Parto de la siguiente tabla:

(adjunto Picture0001)

Hago una select tal que:

select a.codigoempresa, a.ccoste,
importeact = case A.idperiodo
when 1 then A.importe
else 0
end,
importeant = case A.idperiodo
when 3 then A.importe
else 0
end
from MiTAbla as A

Y obtengo esto:

(adjunto Picture0002)

No entiendo por qué me está generando dos registros por cada
(codigoempresa-ccoste).

Cualquier ayuda es binvenida :)

Gracias, un saludo

Eva.








Preguntas similares