Consulta SQL

20/03/2009 - 00:21 por Martin | Informe spam
hola,

tengo que hacer la siguiente consulta, y sinceramente estoy muy trancado, no
parece dificil pero esoty nublado

tengo 3 tablas y en las 3 tablas tengo 2 campos en común PRODUCTO y CANTIDAD

entonces debo devolver para cada producto la cantidad total que hay
que sería la SUMA de las cantidades de 2 tablas menos la cantidad de la otra
OJO!! el registro del producto puede aparecer muchas veces en una misma
tabla con <> cantidades.

agradezco algún pique!!

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
20/03/2009 - 02:06 | Informe spam
Martin,

Hombre si al menos posteara data de ejemplo, entonces seria mas facil para
quien trata de ayudar.

Supongamos que tenemos tres tablas:

- t1(producto, cantidad)
- t2(producto, cantidad)
- t3(producto, cantidad)

y que queremos sumar las cantidades de las tablas t1 y t2, por cada
producto, y ademas queremos substraer las cantidades en la tabla t3.

select
coalesce(a.producto, b.producto) as producto,
isnull(a.sum_cantidad, 0) - isnull(b.sum_cantidad, 0) as diferencia,
case
when a.producto is not null and b.producto is null then 'Esta en la
union y no en t3'
when a.producto is null and b.producto is not null then 'Esta en t3 y no
en la union'
else 'Esta en ambos lados'
end as [Donde esta el producto]
from
(
select
producto, sum(cantidad) as sum_cantidad
from
(
select producto, cantidad from t1
union all
select producto, cantidad from t2
) as t
group by
producto
) as a
full join
(
select producto, sum(cantidad) as sum_cantidad
from t3
group by producto
) as b
on a.producto = b.producto
GO

Uso "full join" porque no se si pueden haber productos en t3 que no esten en
la union de t1 y t2.


AMB


"Martin" wrote:

hola,

tengo que hacer la siguiente consulta, y sinceramente estoy muy trancado, no
parece dificil pero esoty nublado

tengo 3 tablas y en las 3 tablas tengo 2 campos en común PRODUCTO y CANTIDAD

entonces debo devolver para cada producto la cantidad total que hay
que sería la SUMA de las cantidades de 2 tablas menos la cantidad de la otra
OJO!! el registro del producto puede aparecer muchas veces en una misma
tabla con <> cantidades.

agradezco algún pique!!



Respuesta Responder a este mensaje
#2 Martín
20/03/2009 - 11:06 | Informe spam
no me da lo que yo quiero esa consulta.

copio los scripts de mis tablas, pero yo quiero que
me de un listado de Descripciones (LE DIJE PRODUCTO EN EL PRIMER POST) de
tal manera que me aparezcan la cantidad que seránlas cant de ingreso + las cant de reintegro - las cant de egresos.

copio los scripts para create:



CREATE TABLE [dbo].[Egreso](

[NroEgreso] [int] NOT NULL,

[Fecha] [smalldatetime] NULL,

[Obra] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Encargado] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Cantidad] [int] NULL,

[Descripcion] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Medida] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Responsable] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL

) ON [PRIMARY]

















CREATE TABLE [dbo].[Ingreso](

[NroIngreso] [int] NOT NULL,

[Fecha] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[NroBoleta] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Transporte] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Encargado] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Cantidad] [int] NULL,

[Descripcion] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Medida] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Ubicacion] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Importe] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Total] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL

) ON [PRIMARY]





CREATE TABLE [dbo].[Reintegro](

[NroReintegro] [int] NOT NULL,

[Fecha] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Obra] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Encargado] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Cantidad] [int] NULL,

[Descripcion] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Medida] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Responsable] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[nroegreso] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL

) ON [PRIMARY]















"Alejandro Mesa" escribió en el
mensaje news:
Martin,

Hombre si al menos posteara data de ejemplo, entonces seria mas facil para
quien trata de ayudar.

Supongamos que tenemos tres tablas:

- t1(producto, cantidad)
- t2(producto, cantidad)
- t3(producto, cantidad)

y que queremos sumar las cantidades de las tablas t1 y t2, por cada
producto, y ademas queremos substraer las cantidades en la tabla t3.

select
coalesce(a.producto, b.producto) as producto,
isnull(a.sum_cantidad, 0) - isnull(b.sum_cantidad, 0) as diferencia,
case
when a.producto is not null and b.producto is null then 'Esta en la
union y no en t3'
when a.producto is null and b.producto is not null then 'Esta en t3 y


no
en la union'
else 'Esta en ambos lados'
end as [Donde esta el producto]
from
(
select
producto, sum(cantidad) as sum_cantidad
from
(
select producto, cantidad from t1
union all
select producto, cantidad from t2
) as t
group by
producto
) as a
full join
(
select producto, sum(cantidad) as sum_cantidad
from t3
group by producto
) as b
on a.producto = b.producto
GO

Uso "full join" porque no se si pueden haber productos en t3 que no esten


en
la union de t1 y t2.


AMB


"Martin" wrote:

> hola,
>
> tengo que hacer la siguiente consulta, y sinceramente estoy muy


trancado, no
> parece dificil pero esoty nublado
>
> tengo 3 tablas y en las 3 tablas tengo 2 campos en común PRODUCTO y


CANTIDAD
>
> entonces debo devolver para cada producto la cantidad total que hay
> que sería la SUMA de las cantidades de 2 tablas menos la cantidad de la


otra
> OJO!! el registro del producto puede aparecer muchas veces en una misma
> tabla con <> cantidades.
>
> agradezco algún pique!!
>
>
>

Respuesta Responder a este mensaje
#3 Martín
20/03/2009 - 11:16 | Informe spam
perdón por la respuesta anterior,
la solución es correcta.
gracias!
"Martín" escribió en el mensaje
news:%23%
no me da lo que yo quiero esa consulta.

copio los scripts de mis tablas, pero yo quiero que
me de un listado de Descripciones (LE DIJE PRODUCTO EN EL PRIMER POST) de
tal manera que me aparezcan la cantidad que serán> las cant de ingreso + las cant de reintegro - las cant de egresos.

copio los scripts para create:



CREATE TABLE [dbo].[Egreso](

[NroEgreso] [int] NOT NULL,

[Fecha] [smalldatetime] NULL,

[Obra] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Encargado] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Cantidad] [int] NULL,

[Descripcion] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Medida] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Responsable] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL

) ON [PRIMARY]

















CREATE TABLE [dbo].[Ingreso](

[NroIngreso] [int] NOT NULL,

[Fecha] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[NroBoleta] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Transporte] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Encargado] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Cantidad] [int] NULL,

[Descripcion] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Medida] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Ubicacion] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Importe] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Total] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL

) ON [PRIMARY]





CREATE TABLE [dbo].[Reintegro](

[NroReintegro] [int] NOT NULL,

[Fecha] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Obra] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Encargado] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Cantidad] [int] NULL,

[Descripcion] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Medida] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[Responsable] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL,

[nroegreso] [nchar](10) COLLATE Modern_Spanish_CI_AS NULL

) ON [PRIMARY]















"Alejandro Mesa" escribió en el
mensaje news:
> Martin,
>
> Hombre si al menos posteara data de ejemplo, entonces seria mas facil


para
> quien trata de ayudar.
>
> Supongamos que tenemos tres tablas:
>
> - t1(producto, cantidad)
> - t2(producto, cantidad)
> - t3(producto, cantidad)
>
> y que queremos sumar las cantidades de las tablas t1 y t2, por cada
> producto, y ademas queremos substraer las cantidades en la tabla t3.
>
> select
> coalesce(a.producto, b.producto) as producto,
> isnull(a.sum_cantidad, 0) - isnull(b.sum_cantidad, 0) as diferencia,
> case
> when a.producto is not null and b.producto is null then 'Esta en la
> union y no en t3'
> when a.producto is null and b.producto is not null then 'Esta en t3


y
no
> en la union'
> else 'Esta en ambos lados'
> end as [Donde esta el producto]
> from
> (
> select
> producto, sum(cantidad) as sum_cantidad
> from
> (
> select producto, cantidad from t1
> union all
> select producto, cantidad from t2
> ) as t
> group by
> producto
> ) as a
> full join
> (
> select producto, sum(cantidad) as sum_cantidad
> from t3
> group by producto
> ) as b
> on a.producto = b.producto
> GO
>
> Uso "full join" porque no se si pueden haber productos en t3 que no


esten
en
> la union de t1 y t2.
>
>
> AMB
>
>
> "Martin" wrote:
>
> > hola,
> >
> > tengo que hacer la siguiente consulta, y sinceramente estoy muy
trancado, no
> > parece dificil pero esoty nublado
> >
> > tengo 3 tablas y en las 3 tablas tengo 2 campos en común PRODUCTO y
CANTIDAD
> >
> > entonces debo devolver para cada producto la cantidad total que hay
> > que sería la SUMA de las cantidades de 2 tablas menos la cantidad de


la
otra
> > OJO!! el registro del producto puede aparecer muchas veces en una


misma
> > tabla con <> cantidades.
> >
> > agradezco algún pique!!
> >
> >
> >
>




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida