SQL - SUM dentro Subconsulta

   
Vista:

SUM dentro Subconsulta

Publicado por Nestor (3 intervenciones) el 11/03/2016 20:32:11
Buenas espero que todos estén bien.

Soy nuevo en la programación con SQL y he estado trabajando con una consulta y creo que la forma más fácil de realizarla es por medio de subconsultas, pero no me termina funcionando.

Básicamente es un sistema que recopila informacion de compras y envios de los clientes y está diseñado groso modo de la siguiente manera:

-OrderHead (Contiene la cabecera de la orden tal como Numero de la Orden, ID del Cliente, Fecha de la Orden)
-OrderDesc (Contiene el detalle de la Orden tal como Numero de la Orden, Cantidad de Productos, ID Producto, Linea de Orden (Esto por que una orden puede tener varias lineas de productos))
-OrderRel (Es el detalle de la entrega de la orden (para cuando la necesitan ya que una línea puede tener varias fechas de entrega) Trae Numero de la Orden, NumeroOrdenLinea,Numero de Release, Fecha de Entrega, Cantidad de entrega)
-ShipHead (Contiene el numero de remisión con el que es entregada la orden, Fecha de la entrega, ID Cliente)
-ShipDtl. (Contiene el numero de la entrega, fecha de entrega, Numero de la Orden, Numero de la Linea, Numero dde Release, Cantidad Entregada)

Adjunto Un Modelo E-R Básico para tener una mejor idea.

La idea es sacar el Total de la compra por order y el total de productos enviados por cliente.

hasta el momento había hecho algo asi:

select Customer.Name, OrderHed.OrderNum, SUM(OrderDtl.OrderQty) as TotalOrdenes, (select sum(ShipDtl.OurInventoryShipQty),ShipDtl.OrderNum from shipdtl) from
customer inner join orderHed
on customer.custNum=orderhed.custNum inner Join orderDtl
on orderhed.ordernum=orderdtl.ordernum
group by OrderHed.OrderNum,Customer.Name

Pero me da error porque SQL Server no permite hacer sumas dentro de subconsultas.

Les agradecería mucho su colaboración

Un abrazo
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
Imágen de perfil de Isaias

SUM dentro Subconsulta

Publicado por Isaias (690 intervenciones) el 11/03/2016 21:43:05
¿No te hace falta el GROUP BY en tu subconsulta?, Puedes crear una función e invocarla, para que te de la sumatoria.
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

SUM dentro Subconsulta

Publicado por leonardo_josue (878 intervenciones) el 14/03/2016 21:30:07
Hola Nestor:

No estoy seguro de que el error que te está marcando la consulta sea en realidad con la suma, sino más bien con el número de campos que tienes en el SUB SELECT. Además de lo que comenta Isaías acerca del GROUP BY, en la subconsulta ESTÁS TRATANDO DE REGRESAR DOS VALORES EN EL SELECT, por lo tanto esto no es posible... cuando utilizas una subconsulta dentro del SELECT, este debe regresar UNO y SOLO UN REGISTRO:

Imagina este ejemplo, supongamos que tenemos una tabla asi:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT * FROM paises;
+---------+-------------+
| id_pais | descripcion |
+---------+-------------+
|       1 | Argentina   |
|       2 | Bélgica     |
|       3 | Canadá      |
|       4 | Dinamarca   |
|       5 | España      |
+---------+-------------+
5 rows in set (0.00 sec)

Ahora, supongamos que queremos obtener el campo DESCRIPCION como una subconsulta a la misma tabla, entonces lo hacemos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT T1.id_pais, (SELECT descripcion
    ->                     FROM paises
    ->                     WHERE paises.id_pais = T1.id_pais) descripcion
    -> FROM paises T1;
+---------+-------------+
| id_pais | descripcion |
+---------+-------------+
|       1 | Argentina   |
|       2 | Bélgica     |
|       3 | Canadá      |
|       4 | Dinamarca   |
|       5 | España      |
+---------+-------------+
5 rows in set (0.00 sec)

Ahora observa lo que pasa si en el SUB-SELECT pones dos campos, no sólamente la descripcion:

1
2
3
4
5
mysql> SELECT T1.id_pais, (SELECT id_pais, descripcion
    ->                     FROM paises
    ->                     WHERE paises.id_pais = T1.id_pais) descripcion
    -> FROM paises T1;
ERROR 1241 (21000): Operand should contain 1 column(s)

El error que aparece dice que SÓLO DEBES REGRESAR UNA COLUMNA EN LA SUBCONSULTA... creo que ahí está el verdadero problema.

Checa lo que te comento, si continuas con problemas, POSTEA EXACTAMENTE EL ERROR QUE TE ESTÁ ARROJANDO EL MOTOR DE BD'S.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

SUM dentro Subconsulta

Publicado por Néstor Peña nestorcool@gmail.com (3 intervenciones) el 22/03/2016 17:40:31
Hola, el problema es que cuando intento hacer el group by dentro de la subconsulta me arroja error,, el motor de la base s datos que estoy usando es SQL Server 2008 R2...
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

SUM dentro Subconsulta

Publicado por Nestor (3 intervenciones) el 22/03/2016 17:45:30
Hola, el problema es que cuando intento hacer el group by dentro de la subconsulta me arroja error,, el motor de la base s datos que estoy usand es SQL Server 2008 R2...
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