Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Portada » Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 1 mensaje ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Vie Jul 01, 2005 7:00 am
Mensajes: 1001
Ubicación: Oaxaca, Mexico

Nota Publicado: Vie May 25, 2018 5:05 pm 
Arriba  
Buen día a todas y todos

Ya tenia tiempo de no visitar Espacio Linux y sus foros

Esta vez es nuevamente para solicitar su ayuda con algo en que me he estado peleando, y es una consulta en SQL Server 2012 que hace una consulta a tres tablas, y la quiero reorganizar para usar la informacion como reporte.
Ya he hecho estas consultas sin gran problema y con resultados correctos, pero esta vez no encuentro mi error

El asunto es que hecho mano de PIVOT para reorganizar los valores de una columna a cabeceras de columna, haciendolo con una sola columna me sale el resultado que quiero, pero a partir de dos ya no, dos valores de una tabla comparten el dato de una sucursal, esos dos valores los intento pivotear, la tercera es de existencias en sucursales.

Las tablas son las siguientes:
Articulo
ArtCosto
ArtDisponible

Hay otra tabla que se llama sucursal con las columnas Sucursal (Valores del 0 al 9), Nombre ("Corporativo" a "Xoxo") y Prefijo ("COR" a "XOX")

Si hago el pivot a una sola columna (Costo), el resultado me sale correcto
Código:
with Lista as (
Select Art.Articulo, Art.Descripcion1, Art.Categoria,
Sucursal.Prefijo, ArtCosto.UltimoCosto
--Sucursal.Nombre, ArtCosto.CostoPromedio
from Art, ArtCosto, Sucursal
where Art.Articulo = ArtCosto.Articulo
and ArtCosto.Sucursal = Sucursal.Sucursal
) select * from Lista
PIVOT (SUM(UltimoCosto) for Prefijo in (COR,MAT,IXC,SER,MON,RIV,FER,RIO,VOL,XOX)) U
order by Categoria, Articulo


Resultado
Pivote a 1 Columna

Lo mismo con el PIVOT a Existencia
Código:
--Disponible
with Lista as (
select Art.Articulo, Art.Descripcion1 as Descripcion, Art.Categoria, Art.Estatus,
ArtDisponible.Almacen,ArtDisponible.Disponible
from Art
left outer join ArtDisponible on Art.Articulo = ArtDisponible.Articulo
where Art.Categoria not in ('VARIOS','ACTIVO FIJO')
)
select * from Lista
PIVOT (SUM (Disponible) FOR Almacen in (ATR,MATRIZ,IXCOTEL,SERRANO,MONTOYA,RIVERAS,FERROCARRIL,RIOS,VOLCANES,XOXO)) D
order by Categoria, Articulo


Pivot a Existencia

Pero si quiero hacer pivot a tres columnas, me repite el articulo segun las apariciones en almacen o sucursal, agregando NULL en las casillas donde no aparece, cuando lo que busco es que todo quede en una sola fila por articulo, poniendo NULL en donde no encuentre datos

Código:
with Lista as (
Select Art.Articulo, Art.Descripcion1, Art.Categoria, Art.Estatus,
Sucursal.Sucursal,ArtCosto.UltimoCosto,
Sucursal.Prefijo as Prefijo, ArtCosto.CostoPromedio,
ArtDisponible.Almacen, ArtDisponible.Disponible
from Art
left outer join ArtCosto on Art.Articulo = ArtCosto.Articulo   
left outer join Sucursal on ArtCosto.Sucursal = Sucursal.Sucursal
left outer join ArtDisponible on Art.Articulo = ArtDisponible.Articulo
where Art.Categoria not in ('ACTIVO FIJO','VARIOS')
and Art.Estatus in ('ALTA','DESCONTINUADO')
) select * from Lista
PIVOT (SUM(UltimoCosto) FOR Sucursal in ([0],[1],[2],[3],[4],[5],[6],[7],[8],[9])) U
PIVOT (SUM(CostoPromedio) FOR Prefijo in (COR,MAT,IXC,SER,MON,RIV,FER,RIO,VOL,XOX)) P
PIVOT (SUM(Disponible) FOR Almacen in (ATR, MATRIZ, IXCOTEL, SERRANO,MONTOYA,RIVERAS,FERROCARRIL,RIOS,VOLCANES,XOXO)) A
order by Categoria, Articulo


Pivot de 3 columnas

Ya le he dado varias vueltas y visto otro ejemplo donde hice pivote a 2 columnas con resultados correctos, pero aqui nada mas no doy con mi error

Agradezco de antemano la orientación que puedan darme.

Editado -- Dom May 20, 2018 11:47 pm --

Estoy viendo que tiene que ver con la referencia a la misma tabla de los costos (Ultimo Costo y Costo Promedio), y tal vez con la tabla Sucursal, si tomo un costo y la existencia, me hace el PIVOT de forma correcta

Solo comenté las lineas que según mi suposición podría generar el conflicto

Código:
with Lista as (
Select Art.Articulo, Art.Descripcion1, Art.Categoria, Art.Estatus,
--Sucursal.Sucursal,ArtCosto.UltimoCosto,
Sucursal.Prefijo as Prefijo, ArtCosto.CostoPromedio,
ArtDisponible.Almacen, ArtDisponible.Disponible
from Art
left outer join ArtCosto on Art.Articulo = ArtCosto.Articulo   
left outer join Sucursal on ArtCosto.Sucursal = Sucursal.Sucursal
left outer join ArtDisponible on Art.Articulo = ArtDisponible.Articulo
where Art.Categoria not in ('ACTIVO FIJO','VARIOS')
and Art.Estatus in ('ALTA','DESCONTINUADO')
) select * from Lista
--PIVOT (SUM(UltimoCosto) FOR Sucursal in ([0],[1],[2],[3],[4],[5],[6],[7],[8],[9])) U
PIVOT (SUM(CostoPromedio) FOR Prefijo in (COR,MAT,IXC,SER,MON,RIV,FER,RIO,VOL,XOX)) P
PIVOT (SUM(Disponible) FOR Almacen in (ATR, MATRIZ, IXCOTEL, SERRANO,MONTOYA,RIVERAS,FERROCARRIL,RIOS,VOLCANES,XOXO)) A
order by Categoria, Articulo


Resultado
Pivote a dos columnas

Seguiré indagando...
Aun así se agradece cualquier orientacion

Editado -- Lun May 21, 2018 1:21 am --

Listo
Si tenia que ver la referencia a la misma tabla, solo hice un alias tanto a la tabla de Costos como a la de Sucursal

Código:
with Lista as (
Select Art.Articulo, Art.Descripcion1, Art.Categoria, Art.Estatus,
S.Sucursal,UC.UltimoCosto,
Sucursal.Prefijo as Prefijo, ArtCosto.CostoPromedio,
ArtDisponible.Almacen, ArtDisponible.Disponible
from Art
left outer join ArtCosto on Art.Articulo = ArtCosto.Articulo   
left outer join ArtCosto as UC on Art.Articulo = UC.Articulo
left outer join Sucursal on ArtCosto.Sucursal = Sucursal.Sucursal
left outer join Sucursal as S on UC.Sucursal = S.Sucursal
left outer join ArtDisponible on Art.Articulo = ArtDisponible.Articulo
where Art.Categoria not in ('ACTIVO FIJO','VARIOS')
and Art.Estatus in ('ALTA','DESCONTINUADO')
) select * from Lista
PIVOT (SUM(UltimoCosto) FOR Sucursal in ([0],[1],[2],[3],[4],[5],[6],[7],[8],[9])) U
PIVOT (SUM(CostoPromedio) FOR Prefijo in (COR,MAT,IXC,SER,MON,RIV,FER,RIO,VOL,XOX)) P
PIVOT (SUM(Disponible) FOR Almacen in (ATR,MATRIZ,IXCOTEL,SERRANO,MONTOYA,RIVERAS,FERRO,RIOS,VOLCANES,XOXO)) A
order by Categoria, Articulo


Resultado
Pivot Correcto

Sigo diciendo que me tardé mucho en usar JOINS, ya que estaba mal acostumbrado a las consultas normales y subconsultas, hasta que vi que tenia sus limitantes :?
Ademas que la consulta es mucho mas legible

Editado -- Sab May 26, 2018 1:05 am --

Saludos a todas y todos

Nuevamente vuelvo por aca por una duda....
Aunque me doy casi por servido con el resultado de la consulta, acaba de brincarme otra situacion, mas que nada por la persona que vio el resultado de esta consulta, que ocupa la informacion como reporte y para generar correcciones y otros movimientos; desea que la informacion que se le presenta, que es correcta para el, sea mostrada ahora en un orden diferente...

Es decir, el resultado actual muestra la informacion en el siguiente orden

[Articulo] [Descripcion] [Categoria] [Estatus] [UltCSuc1] [UltCSuc2] [CPromSuc1] [CPromSuc2] [ExistSuc1] [ExistSuc2]

Y lo que necesita la persona es que se muestre de la siguiente manera, teniendo las columnas de Ultimo Costo y Costo
promedio juntas por sucursal.

[Articulo] [Descripcion] [Categoria] [Estatus] [UltCSuc1] [CPromSuc1] [UltCSuc2] [CPromSuc2] [ExistSuc1] [ExistSuc2]

Y estaba viendo en una pagina de Stack Overflow que podria ordenarse usando un ORDER CASE Columna 'Valor' THEN Posicion
Stack Overflow - "Is it possible to select a specific ORDER BY in SQL Server 2008?"

El problema que veo con esto es que sirve cuando se quiere reordenar los resultados de un campo, y en la consulta se ocupan dos campos, y claro, lluego se ocupa el PIVOT, entonces el orden seria despues del PIVOT.


Agradezco de antemano cualquier orientacion.

_________________
Blaise Pascal: "Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
Twitter: @nagual_oax

 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 1 mensaje ] 
Nuevo tema Responder al tema

Saltar a:  


 Temas relacionados   Autor   Respuestas   Vistas   Último mensaje 
Transferencia de zona de Windows Server 2012 a Linux(CentOs)

en Redes y Servidores

José Mauricio

0

772

Vie Sep 02, 2016 5:47 pm

José Mauricio Ver último mensaje

Ayuda: Problema con navegacion de server Server squid [SOLUCIONADO]

en Redes y Servidores

Unix_Sendin

2

3587

Sab Dic 17, 2011 10:57 pm

Unix_Sendin Ver último mensaje

duda varias distribuciones SOLUCIONADO

en Instalación de distribuciones

fermen

11

1647

Lun Dic 02, 2013 6:44 pm

mcun Ver último mensaje

dividir un PDF en varias páginas [Solucionado]

en Software

doc

10

2890

Dom Mar 08, 2015 6:25 pm

cargoan Ver último mensaje

Duda Bash: Varias llamadas (Solucionado)

en Programación

Galileo667

1

538

Sab Oct 20, 2012 2:31 pm

niky45 Ver último mensaje



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC + 1 hora [ DST ]
Traducción al español por Huan Manwë
phpBB SEO