Resulta que deseo obtener un valor de una OP (orden de produccion) y un lote, pero una consulta simple me reporta mas de un valor, como hacer?
Supongamos que tengo una tabla donde cada registro me indica que es una caja y dentro hay una hamburgesa, pero resulta que no todas las hamburgesas son iguales y pesan distinto, para poder determinar el tipo de hamburgesa tengo una relación a otra tabla donde me indica el tipo de hamburgesa y el peso. Cuando se produce una hamburgesa le vamos a indicar un número de OP y un lote, entonces mis tablas quedarian asi suponiendo que quiero sacar cuantos gramos tengo de una OP y un LOTE, hacemos una consulta que quedaría mas o menos asi:
Código: Seleccionar todo
"SELECT dbo.Cajas.Id_OP, dbo.Cajas.Id_Lote, COUNT(*) AS cajas, dbo.TipoHamb.Peso, COUNT(*) * dbo.TipoHamb.Peso AS gramos
FROM dbo.Cajas INNER JOIN
dbo.TipoHamb ON dbo.Cajas.Id_TipoHamb = dbo.TipoHamb.Id_TipoHamb
GROUP BY dbo.Cajas.Id_OP, dbo.Cajas.Id_Lote, dbo.TipoHamb.Peso"
El resultado seria asi: Ups, todavia no obtengo lo que quiero, recordemos que yo solo quiero el total de gramos de una OP y un lote, por ahora lo tengo detallado por peso.
Para lograr lo que necesito vamos a utilizar la stupid table y vamos a hacer lo siguiente:
Código: Seleccionar todo
/* Verificamos que la tabla temporal no este creada..*/
IF EXISTS
(
SELECT *
FROM tempdb.dbo.sysobjects
WHERE ID = OBJECT_ID(N'tempdb..#TempTable')
)
BEGIN
/*Si está creada, la borramos.. */
DROP TABLE #TempTable
END
;
/* Hacemos la consulta pertinente, e insertamos en la temporal */
SELECT dbo.Cajas.Id_OP, dbo.Cajas.Id_Lote, COUNT(*) AS cajas, dbo.TipoHamb.Peso, COUNT(*) * dbo.TipoHamb.Peso AS Gramos
Into #TempTable
FROM dbo.Cajas INNER JOIN
dbo.TipoHamb ON dbo.Cajas.Id_TipoHamb = dbo.TipoHamb.Id_TipoHamb
GROUP BY dbo.Cajas.Id_OP, dbo.Cajas.Id_Lote, dbo.TipoHamb.Peso
/* Calculamos el total de gramos para esa OP y Nro. de lote */
select id_op, id_lote, sum(gramos) as gramos from #TempTable
group by id_op, id_lote
Es muy probable que ésto se pueda resolver de alguna otra manera y quizas mas eficientemente, aqui solo quise mostrar como manejar una tabla temporal de sql...
Con respecto al DROP de la tabla temporal, necesito borrarla, ya que si intento ejecutar la consulta nuevamente me va a dar error porque la tabla ya está definida, por eso es aconsjable verificar que la misma no exista.
Saludos y espero que les sea util.. un mero aprendiz..