Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta sin exito (https://www.clubdelphi.com/foros/showthread.php?t=84391)

Theluar 14-10-2013 06:58:06

Consulta sin exito
 
Que tal Familia, espero todos esten bien!..

Tengo un problema con una consulta de una tabla de ventas.

Tengo una tabla de ventas que cuenta con los siguientes campos:

id , producto, cantidad,importe, fecha,hora

Deseo obtener un listado de las ventas semanales pero, con los productos como columnas y el importe debajo del titulo, algo parecido a esto:

AGUA | JUGO | COCA-COLA | NN |
100.00 50.00 85.00 00.00
25.00 30.00 15.00 10.00
00.00 10.00 55.00 00.00
nn.nn nn.nn nn.nn nn.nn


De antemano gracias!!!

olbeup 14-10-2013 09:02:40

Hola Theluar,

Tendrias que agruparlo por el ID del artículo, seria como esto:
Código SQL [-]
SELECT
    ID
    ,PRODUCTO
    ,SUM(CANTIDAD * IMPORTE) AS TOTALIMPORTE
  FROM Ventas
  GROUP BY ID, PRODUCTO
  ORDER BY PRODUCTO
Un saludo.

Theluar 14-10-2013 17:23:18

Muchas gracias olbeup.

Ya lo he intentado así y el resultado es el mismo:

Sale el producto en una sola columna, y lo que necesito es que cada producto sea una columna diferente, y que cada columna contenga los importes de la semana.

No se si me explique bien .?

Saludos.

olbeup 15-10-2013 09:09:55

Haber que tal esta:
Código SQL [-]
SELECT
    ID
    ,PRODUCTO
    ,SUM(CANTIDAD * IMPORTE) AS TOTALIMPORTE
    ,DATEPART(wk, FECHA) AS SEMANA
  FROM Ventas
  GROUP BY ID, PRODUCTO, DATEPART(wk, FECHA)
  ORDER BY 4, PRODUCTO
Un saludo

oscarac 15-10-2013 21:41:24

No mencionas que base de datos estas usando
lo que buscas se llama PIVOT y en SQL Server solo se puede hacer apartir de la version 2005

Se podria hacer un pivot manual en SQL, pero para eso tendrias que saber la cantidad exacta de productos

Código SQL [-]
Select Fecha,
Sum(Case When Producto = 'AGUA' then Cantidad * importe else 0 end) As AGUA,
Sum(Case When Producto = 'JUGO' then Cantidad * importe else 0 end) As JUGO,
Sum(Case When Producto = 'COCA COLA' then Cantidad * importe else 0 end) As COCACOLA
y asi sucesivamente....

fjcg02 16-10-2013 08:56:17

No sé que motor de bbdd usas, pero esto se puede aplicar a cualquiera.

Saludos

http://clubdelphi.com/foros/showthre...+trasnformadas

oscarac 16-10-2013 19:10:34

Cita:

Empezado por fjcg02 (Mensaje 468395)
No sé que motor de bbdd usas, pero esto se puede aplicar a cualquiera.

Saludos

http://clubdelphi.com/foros/showthre...+trasnformadas


esta es la que le iba a mencionar pero no pude encontrarla

fjcg02 16-10-2013 21:37:44

Cita:

Empezado por oscarac (Mensaje 468420)
esta es la que le iba a mencionar pero no pude encontrarla

Será que soy el autor ... :D

Saludos

oscarac 16-10-2013 21:40:43

lo sospeche desde un principio !!!!

Theluar 20-10-2013 17:34:04

Muchas gracias a todos , probé sus soluciones, de momento opte por solucionarlo con la opcion de nuestro compañero oscarac, muchas gracias. Pero me paracio sumamente interesante el articulo que proporciono fjcg02, solo uqe me asegurare de estudiarlo un poco mas para lograr el entendimineto total del procedure

gracias a todos , ya solucione ese problema.

fjcg02 20-10-2013 21:28:16

Cita:

Empezado por Theluar (Mensaje 468680)
Muchas gracias a todos , probé sus soluciones, de momento opte por solucionarlo con la opcion de nuestro compañero oscarac, muchas gracias. Pero me paracio sumamente interesante el articulo que proporciono fjcg02, solo uqe me asegurare de estudiarlo un poco mas para lograr el entendimineto total del procedure

gracias a todos , ya solucione ese problema.

Te recomiendo que hagas pruebas para lograr un resultado como el que oscarac te sugiere. El procedimiento hace eso exactamente pero de una forma menos manual.

El "problema" de este tipo de consultas es que como añadas un nuevo artículo, tienes que modificar la consulta.
El procedimiento permite que le digas cual es la tabla de productos, hace una select y te la pasa a columnas. es decir, por cada producto añade una fila
Código SQL [-]
Sum(Case When Producto = 'VALOR1' then Cantidad * importe else 0 end) As VALOR1,
...

Esper que te sirva de ayuda.

Un saludo


La franja horaria es GMT +2. Ahora son las 07:45:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi