Que tal Diana.
Eso se llama una consulta de referencias cruzadas, una solución ràpida es la siguiente, a tu primer query cambialo de la siguiente forma:
Código:
select DISTINCT A.idnumoc, sum(D.totalpzasped),c.numenvio,F.deslarga
into #tempInfo
from abordencompra A
inner join dienviosoc B on A.idoc=B.iddocto
inner join dienvios C on C.idenvio=B.idenvio
inner join dienviosdet D on D.idenvio=C.idenvio
inner join secuencias E on D.idlgs=E.idlgs
inner join lineas F on F.idlinea=E.idlinea
where
c.idtipoenv=3
group by A.idnumoc,c.numenvio,F.deslarga
Tienes una tabla temporal llamada #tempInfo, ahora con el siguiente query lo "transpones".
Código:
select idnumo,
sum (
case deslarga
WHEN 'HONDA' THEN suma
ELSE 0
END
) as 'HONDA',
sum (
case deslarga
WHEN 'EUROPEO' THEN suma
ELSE 0
END
) as 'EUROPEO',
sum (
case deslarga
WHEN 'RENAULT' THEN suma
ELSE 0
END
) as 'RENAULT'
from #temp
group by idnumo
El problema es que debes de conocer el número de columnas que vas a presentar, para hacer tu query.
Ahora bien lo anterior se soluciona haciendo un proceso que "arme" el query ( una setencia SQL) de forma automática y sólo tengas que ejecutarlo, y no importe el número de columnas a presentar.
Saludos y cualquier duda aquí estamos.
Suerte!
P.D. En los libros en pantalla de SQL Server hay ejemplos al respecto, busca por "referencias cruzadas" o "cross tab"