SQL - Consulta ¿Como hago?

 
Vista:

Consulta ¿Como hago?

Publicado por Andrea (7 intervenciones) el 08/08/2005 14:42:27
Tengo dos bases,

Cabecera:
Nrocomp
Fecha
Cliente
Vendedor

otra

Items:
NroComp
Item
Kilos
Pesos
CodigoProd

Tengo tres categorias de CodigoProd:

CodigoProd >500000 and CodigoProd< 800000

CodigoProd>799999 and CodigoProd<900000

CodigoProd<499999 and CodigoProd>899999

Necesito conocer las cantidades torales vendidas en Kilos y Pesos para cada rango.

Como hago?

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

RE:Consulta ¿Como hago?

Publicado por Carlos Gil (43 intervenciones) el 08/08/2005 16:02:33
Hola Andrea:

Debido a la estructura de tus tablas la unica forma de hacerlo es con tres SELECT uno para cada categoria. El ejemplo que estoy mostrando separa las ventas por Vendedores

Select Sum ( I.Pesos ) , Sum ( I.Kilos ) , C.Vendedor
From Cabecera C
Inner Join Items I on I.NroComp = C.NroComp
Where I.CodigoProd >500000 and I.CodigoProd< 800000
Group By C.Vendedor

Un select para cada categoria de productos, no se puede hacer en un solo Select por que tu diseño de BD no se ajusta a las necesidades. Para solucionar esto se me ocurre crear una VISTA asi:

CREATE VIEW VItems
AS
SELECT NroComp, Item, Kilos, Pesos, CodigoProd,
CASE
WHEN CodigoProd >500000 and CodigoProd< 800000 THEN 1
WHEN CodigoProd>799999 and CodigoProd<900000 THEN 2
Else 3
END AS cat
FROM Items

Entonces:

Select Sum ( I.Pesos ) , Sum ( I.Kilos ) , VI.cat
From Cabecera C
Inner Join VItems VI on VI.NroComp = C.NroComp
Group By VI.cat

Saludos.
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

RE:Consulta ¿Como hago?

Publicado por Andrea (7 intervenciones) el 08/08/2005 16:19:42
OK, gracias, voy a probar
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

RE:Consulta ¿Como hago?

Publicado por Liliana (426 intervenciones) el 08/08/2005 17:13:44
Otra sugerencia, teniendo en cuenta que podemos usar el CASE en el GROUP BY:

CREATE TABLE #Cabecera
(Nrocomp smallint, Fecha datetime, Cliente smallint, Vendedor smallint)
INSERT #Cabecera SELECT 1, getdate(), 1, 1
INSERT #Cabecera SELECT 2, getdate(), 1, 1
INSERT #Cabecera SELECT 3, getdate(), 1, 1

CREATE TABLE #Items
(NroComp smallint, Item smallint, Kilos smallint, Pesos dec(10,2), CodigoProd int)
INSERT #Items SELECT 1, 1, 10, 100, 510000
INSERT #Items SELECT 1, 2, 20, 200, 520000
INSERT #Items SELECT 2, 1, 10, 100, 110000
INSERT #Items SELECT 2, 2, 20, 200, 320000
INSERT #Items SELECT 2, 3, 10, 100, 810000
INSERT #Items SELECT 3, 1, 20, 200, 920000

SELECT Categoria = CASE WHEN CodigoProd BETWEEN 500001 AND 799999 THEN 'Mayor 500000 Y Menor 800000'
WHEN CodigoProd BETWEEN 800000 AND 899999 THEN 'Mayor 799999 Y Menor 900000'
ELSE 'Menor 500000 O Mayor 900000' END,
Kilos = SUM(Kilos),
Pesos = SUM(Pesos)
FROM #Cabecera C
INNER JOIN #Items I ON I.NroComp = C.NroComp
GROUP BY CASE WHEN CodigoProd BETWEEN 500001 AND 799999 THEN 'Mayor 500000 Y Menor 800000'
WHEN CodigoProd BETWEEN 800000 AND 899999 THEN 'Mayor 799999 Y Menor 900000'
ELSE 'Menor 500000 O Mayor 900000' END

Resultado:

Categoria Kilos Pesos
--------------------------- ----------- --------------
Mayor 500000 Y Menor 800000 30 300.00
Mayor 799999 Y Menor 900000 10 100.00
Menor 500000 O Mayor 900000 50 500.00

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