Agrupar en un query (2009-09-14)

14/09/2009 - 13:28 por Mauricio | Informe spam
Hola a todos,
tengo este query divertido:

SELECT distinct
PROGRP_DESCRIPTION, PRO_DESCRIPTION, FT_NAME, OL_FOOD_REMARK, (SELECT
sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 1 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad1,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 2 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad2,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 3 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad3
FROM MCS_ORDERLINES
inner join MCS_ORDERS ON OL_ORD_ID = ORD_ID
inner join MCS_PRODUCTS ON OL_PRO_ID = PRO_ID
inner join MCS_ProductGroups ON PRO_PROGRP_ID = PROGRP_ID
inner join MCS_FoodTypes ON OL_FT_ID = FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59'

Que me da el siguiente resultado:
Group 9999 Abrikos, tørret Food type 1 NULL NULL 0.000 NULL
Group 9999 Abrikos, tørret Food type 1 NULL 2.000 NULL NULL
Group 9999 Abrikos, tørret Food type 1 Test 1.000 NULL NULL
Group 9999 Brøndkarse, rå Food type 1 NULL NULL NULL 1.000
Group 9999 Brøndkarse, rå Food type 1 NULL 2.000 NULL NULL
Group 9999 Bønnespirer, soja, konserves
Food type 1 dsfdsfsd 4.000 NULL NULL
Group one Oksemørbrad Food type 1 NULL NULL NULL 3.000
Group one Oksemørbrad Food type 1 NULL 6.000 NULL NULL
Group one Recipe 6003 Food type 1 NULL NULL NULL 1.000
Group one Recipe 6003 Food type 1 NULL NULL 0.000 NULL
Group one Recipe 6003 Food type 1 NULL 2.000 NULL NULL

Si nos fijamos en las 2 primeras filas las 4 primeras columnas son
iguales. Cómo puedo agrupar el query por esas 4 columnas?
Gracias desde ya.

Mauricio
Copenhague, Dinamarca

Preguntas similare

Leer las respuestas

#1 Ruben Garrigos
14/09/2009 - 13:37 | Informe spam
Hola Mauricio,

Deberás añadir una cláusula group by por las columnas que indicas (PROGRP_DESCRIPTION,
PRO_DESCRIPTION, FT_NAME, OL_FOOD_REMARK). Para el resto de funciones deberás
elegir la función de agregado más apropiada. Entiendo que en tu caso la función
apropiada será la suma (SUM) aunque quizás deberías replantearte la reescritura
de toda la consulta intentando evitar en lo posible las subconsultas (que
tienen pinta de costosas a priori).

Un saludo,

Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba

Hola a todos,
tengo este query divertido:
SELECT distinct
PROGRP_DESCRIPTION, PRO_DESCRIPTION, FT_NAME, OL_FOOD_REMARK, (SELECT
sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID > PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 1 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID > MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad1,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID > PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 2 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID > MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad2,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID > PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 3 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID > MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad3
FROM MCS_ORDERLINES
inner join MCS_ORDERS ON OL_ORD_ID = ORD_ID
inner join MCS_PRODUCTS ON OL_PRO_ID = PRO_ID
inner join MCS_ProductGroups ON PRO_PROGRP_ID = PROGRP_ID
inner join MCS_FoodTypes ON OL_FT_ID = FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59'
Que me da el siguiente resultado:
Group 9999 Abrikos, tørret Food type 1 NULL NULL 0.000 NULL
Group 9999 Abrikos, tørret Food type 1 NULL 2.000 NULL NULL
Group 9999 Abrikos, tørret Food type 1 Test 1.000 NULL NULL
Group 9999 Brøndkarse, rå Food type 1 NULL NULL NULL 1.000
Group 9999 Brøndkarse, rå Food type 1 NULL 2.000 NULL NULL
Group 9999 Bønnespirer, soja, konserves
Food type 1 dsfdsfsd 4.000 NULL NULL
Group one Oksemørbrad Food type 1 NULL NULL NULL 3.000
Group one Oksemørbrad Food type 1 NULL 6.000 NULL NULL Group one
Recipe 6003 Food type 1 NULL NULL NULL 1.000 Group one Recipe 6003
Food type 1 NULL NULL 0.000 NULL Group one Recipe 6003 Food type 1
NULL 2.000 NULL NULL

Si nos fijamos en las 2 primeras filas las 4 primeras columnas son
iguales. Cómo puedo agrupar el query por esas 4 columnas?
Gracias desde ya
Respuesta Responder a este mensaje
#2 Carlos Sacristan
14/09/2009 - 13:40 | Informe spam
¿Y qué valor quieres mostrar del resto de las columnas? O, dicho de otro
modo, ¿qué función de agregado habría que aplicar al resto de las columnas
para hacer la fila única?

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba


"Mauricio" wrote in message
news:
Hola a todos,
tengo este query divertido:

SELECT distinct
PROGRP_DESCRIPTION, PRO_DESCRIPTION, FT_NAME, OL_FOOD_REMARK, (SELECT
sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 1 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad1,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 2 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad2,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 3 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad3
FROM MCS_ORDERLINES
inner join MCS_ORDERS ON OL_ORD_ID = ORD_ID
inner join MCS_PRODUCTS ON OL_PRO_ID = PRO_ID
inner join MCS_ProductGroups ON PRO_PROGRP_ID = PROGRP_ID
inner join MCS_FoodTypes ON OL_FT_ID = FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59'

Que me da el siguiente resultado:
Group 9999 Abrikos, tørret Food type 1 NULL NULL 0.000 NULL
Group 9999 Abrikos, tørret Food type 1 NULL 2.000 NULL NULL
Group 9999 Abrikos, tørret Food type 1 Test 1.000 NULL NULL
Group 9999 Brøndkarse, rå Food type 1 NULL NULL NULL 1.000
Group 9999 Brøndkarse, rå Food type 1 NULL 2.000 NULL NULL
Group 9999 Bønnespirer, soja, konserves
Food type 1 dsfdsfsd 4.000 NULL NULL
Group one Oksemørbrad Food type 1 NULL NULL NULL 3.000
Group one Oksemørbrad Food type 1 NULL 6.000 NULL NULL
Group one Recipe 6003 Food type 1 NULL NULL NULL 1.000
Group one Recipe 6003 Food type 1 NULL NULL 0.000 NULL
Group one Recipe 6003 Food type 1 NULL 2.000 NULL NULL

Si nos fijamos en las 2 primeras filas las 4 primeras columnas son
iguales. Cómo puedo agrupar el query por esas 4 columnas?
Gracias desde ya.

Mauricio
Copenhague, Dinamarca


Respuesta Responder a este mensaje
#3 Mauricio
14/09/2009 - 13:59 | Informe spam
La idea es obtener algo así:

Grupo Descripción Tipo Observacion Tam1 Tam2 Tam3 Tam4
9999 Abrikos Food Type 1 Algo aquí 1 0 1 2

Es decir que agrupo las primeras 4 y muestro qué cantidad de
porciones de tamaño 1, tamaño 2, etc. tengo por cada uno de esos
agrupamientos.
Se entiende? No me resulta muy sencillo de explicar.

Carlos Sacristan avait énoncé :
¿Y qué valor quieres mostrar del resto de las columnas? O, dicho de otro
modo, ¿qué función de agregado habría que aplicar al resto de las columnas
para hacer la fila única?

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba


"Mauricio" wrote in message
news:
Hola a todos,
tengo este query divertido:

SELECT distinct
PROGRP_DESCRIPTION, PRO_DESCRIPTION, FT_NAME, OL_FOOD_REMARK, (SELECT
sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID = PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 1 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad1,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID = PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 2 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad2,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID = PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 3 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad3
FROM MCS_ORDERLINES
inner join MCS_ORDERS ON OL_ORD_ID = ORD_ID
inner join MCS_PRODUCTS ON OL_PRO_ID = PRO_ID
inner join MCS_ProductGroups ON PRO_PROGRP_ID = PROGRP_ID
inner join MCS_FoodTypes ON OL_FT_ID = FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59'

Que me da el siguiente resultado:
Group 9999 Abrikos, tørret Food type 1 NULL NULL 0.000 NULL
Group 9999 Abrikos, tørret Food type 1 NULL 2.000 NULL NULL
Group 9999 Abrikos, tørret Food type 1 Test 1.000 NULL NULL
Group 9999 Brøndkarse, rå Food type 1 NULL NULL NULL 1.000
Group 9999 Brøndkarse, rå Food type 1 NULL 2.000 NULL NULL
Group 9999 Bønnespirer, soja, konserves Food type 1 dsfdsfsd 4.000 NULL
NULL
Group one Oksemørbrad Food type 1 NULL NULL NULL 3.000
Group one Oksemørbrad Food type 1 NULL 6.000 NULL NULL
Group one Recipe 6003 Food type 1 NULL NULL NULL 1.000
Group one Recipe 6003 Food type 1 NULL NULL 0.000 NULL
Group one Recipe 6003 Food type 1 NULL 2.000 NULL NULL

Si nos fijamos en las 2 primeras filas las 4 primeras columnas son
iguales. Cómo puedo agrupar el query por esas 4 columnas?
Gracias desde ya.

Copenhague, Dinamarca







Mauricio
Copenhague, Dinamarca
Respuesta Responder a este mensaje
#4 Carlos Sacristan
14/09/2009 - 15:43 | Informe spam
Por lo que veo, los valores siguientes a los cuatro primeros son subselects.
Si aparecen valores repetidos es porque te faltan campos que combinar

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba


"Mauricio" wrote in message
news:
La idea es obtener algo así:

Grupo Descripción Tipo Observacion Tam1 Tam2 Tam3 Tam4
9999 Abrikos Food Type 1 Algo aquí 1 0 1 2

Es decir que agrupo las primeras 4 y muestro qué cantidad de porciones
de tamaño 1, tamaño 2, etc. tengo por cada uno de esos agrupamientos.
Se entiende? No me resulta muy sencillo de explicar.

Carlos Sacristan avait énoncé :
¿Y qué valor quieres mostrar del resto de las columnas? O, dicho de otro
modo, ¿qué función de agregado habría que aplicar al resto de las
columnas para hacer la fila única?

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba


"Mauricio" wrote in message
news:
Hola a todos,
tengo este query divertido:

SELECT distinct
PROGRP_DESCRIPTION, PRO_DESCRIPTION, FT_NAME, OL_FOOD_REMARK, (SELECT
sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 1 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad1,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 2 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad2,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 3 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad3
FROM MCS_ORDERLINES
inner join MCS_ORDERS ON OL_ORD_ID = ORD_ID
inner join MCS_PRODUCTS ON OL_PRO_ID = PRO_ID
inner join MCS_ProductGroups ON PRO_PROGRP_ID = PROGRP_ID
inner join MCS_FoodTypes ON OL_FT_ID = FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59'

Que me da el siguiente resultado:
Group 9999 Abrikos, tørret Food type 1 NULL NULL 0.000 NULL
Group 9999 Abrikos, tørret Food type 1 NULL 2.000 NULL NULL
Group 9999 Abrikos, tørret Food type 1 Test 1.000 NULL NULL
Group 9999 Brøndkarse, rå Food type 1 NULL NULL NULL 1.000
Group 9999 Brøndkarse, rå Food type 1 NULL 2.000 NULL NULL
Group 9999 Bønnespirer, soja, konserves Food type 1 dsfdsfsd 4.000 NULL
NULL
Group one Oksemørbrad Food type 1 NULL NULL NULL 3.000
Group one Oksemørbrad Food type 1 NULL 6.000 NULL NULL
Group one Recipe 6003 Food type 1 NULL NULL NULL 1.000
Group one Recipe 6003 Food type 1 NULL NULL 0.000 NULL
Group one Recipe 6003 Food type 1 NULL 2.000 NULL NULL

Si nos fijamos en las 2 primeras filas las 4 primeras columnas son
iguales. Cómo puedo agrupar el query por esas 4 columnas?
Gracias desde ya.

Copenhague, Dinamarca







Mauricio
Copenhague, Dinamarca


Respuesta Responder a este mensaje
#5 Mauricio
15/09/2009 - 11:58 | Informe spam
Hola Carlos,
voy con otro ejemplo, a ver si puedo hacerlo más claro. Supongamos
un negocio que vende ropa y tiene 3 talles, S, M y L.
Si la tabla de líneas de factura tiene el artículo vendido, la
cantidad y su talle necesito un listado de este tipo:

Artículo Talle S Talle M Talle L
Falda 3 5 8
Camiseta 5 10 7

Hay forma de hacer esto con una sentencia SQL? O debo trabajarlo con
código?
Muchas gracias por tu tiempo y paciencia.
Saludos.


Carlos Sacristan a exprimé avec précision :
Por lo que veo, los valores siguientes a los cuatro primeros son subselects.
Si aparecen valores repetidos es porque te faltan campos que combinar

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba


"Mauricio" wrote in message
news:
La idea es obtener algo así:

Grupo Descripción Tipo Observacion Tam1 Tam2 Tam3 Tam4
9999 Abrikos Food Type 1 Algo aquí 1 0 1 2

Es decir que agrupo las primeras 4 y muestro qué cantidad de porciones de
tamaño 1, tamaño 2, etc. tengo por cada uno de esos agrupamientos.
Se entiende? No me resulta muy sencillo de explicar.

Carlos Sacristan avait énoncé :
¿Y qué valor quieres mostrar del resto de las columnas? O, dicho de otro
modo, ¿qué función de agregado habría que aplicar al resto de las columnas
para hacer la fila única?

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba


"Mauricio" wrote in message
news:
Hola a todos,
tengo este query divertido:

SELECT distinct
PROGRP_DESCRIPTION, PRO_DESCRIPTION, FT_NAME, OL_FOOD_REMARK, (SELECT
sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 1 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad1,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 2 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad2,
(SELECT sum(OL_Quantity) FROM MCS_ORDERLINES OL
inner join MCS_ORDERS ORD ON OL.OL_ORD_ID = ORD.ORD_ID
inner join MCS_PRODUCTS PRO ON OL.OL_PRO_ID = PRO.PRO_ID
inner join MCS_ProductGroups PROGRP ON PRO.PRO_PROGRP_ID =
PROGRP.PROGRP_ID
inner join MCS_FoodTypes FT ON OL.OL_FT_ID = FT.FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59' AND
OL.OL_Portion_Size = 3 AND
OL.OL_ORD_ID = MCS_ORDERS.ORD_ID AND OL.OL_PRO_ID = MCS_PRODUCTS.PRO_ID
AND
PRO.PRO_PROGRP_ID = MCS_ProductGroups.PROGRP_ID AND
OL.OL_FT_ID = Mcs_FoodTypes.FT_ID) AS Cantidad3
FROM MCS_ORDERLINES
inner join MCS_ORDERS ON OL_ORD_ID = ORD_ID
inner join MCS_PRODUCTS ON OL_PRO_ID = PRO_ID
inner join MCS_ProductGroups ON PRO_PROGRP_ID = PROGRP_ID
inner join MCS_FoodTypes ON OL_FT_ID = FT_ID
WHERE
OL_DATE BETWEEN '20090901 00:00:00' AND '20090914 23:59:59'

Que me da el siguiente resultado:
Group 9999 Abrikos, tørret Food type 1 NULL NULL 0.000 NULL
Group 9999 Abrikos, tørret Food type 1 NULL 2.000 NULL NULL
Group 9999 Abrikos, tørret Food type 1 Test 1.000 NULL NULL
Group 9999 Brøndkarse, rå Food type 1 NULL NULL NULL 1.000
Group 9999 Brøndkarse, rå Food type 1 NULL 2.000 NULL NULL
Group 9999 Bønnespirer, soja, konserves Food type 1 dsfdsfsd 4.000 NULL
NULL
Group one Oksemørbrad Food type 1 NULL NULL NULL 3.000
Group one Oksemørbrad Food type 1 NULL 6.000 NULL NULL
Group one Recipe 6003 Food type 1 NULL NULL NULL 1.000
Group one Recipe 6003 Food type 1 NULL NULL 0.000 NULL
Group one Recipe 6003 Food type 1 NULL 2.000 NULL NULL

Si nos fijamos en las 2 primeras filas las 4 primeras columnas son
iguales. Cómo puedo agrupar el query por esas 4 columnas?
Gracias desde ya.

Copenhague, Dinamarca







Copenhague, Dinamarca







Mauricio
Copenhague, Dinamarca
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida