SQL - Agrupar por columnas en vez de por filas

   
Vista:

Agrupar por columnas en vez de por filas

Publicado por tomas (6 intervenciones) el 09/10/2007 19:36:46
Hola,
Llevo todo el día detrás de esta consulta pero no consigo saber como hacerla....

Tabla
[Nombre cliente]
Item
Valor

Ejemplo Tablas con datos

Tomas, bici, 200
Oso, bici, 300
Tomas, coche, 100

Resultado esperado

Nombre cliente bici coche
Tomas 300 100
Oso 300 0

Como se puede hacer?
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

RE:Agrupar por columnas en vez de por filas

Publicado por Isaias (5073 intervenciones) el 09/10/2007 23:57:41
¿Podrias decirnos que base de datos estas ocupando?
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

RE:Agrupar por columnas en vez de por filas

Publicado por tomas (6 intervenciones) el 10/10/2007 09:42:27
Hola,

La base de datos es un MS Sql Server.

No se si con mi anterior explicacion quedaba muy claro...La pongo otra vez un poco mas explicada:

- Tengo una tabla "Tabla1" con 3 columnas(nombreCliente, item y valor)

Tabla1
nombreCliente
Item
Valor

- Por lo que unos posibles valores en la tabla serían de este tipo

Tomas, bici, 300
Oso, bici, 200
Tomas, bici, 100
Tomas, coche, 150

- Y la consulta que me gustaría obtener sería

Tomas, 400, 150
Oso, 200, 0

siendo 400 la suma de los valores de bici para Tomas, y 150 la suma de valores de coche para Tomas,
y siendo 200 la suma de los valores de bici para Oso, y 0 la suma de valores de coche para Oso.

Muchas gracias!
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

RE:Agrupar por columnas en vez de por filas

Publicado por tomas (6 intervenciones) el 10/10/2007 14:50:29
SELECT DISTINCT P.NOMBRE, NVL(GB.SUMA,0) AS BICI, NVL(GC.SUMA,0) AS COCHE

FROM PRUEBA_UNAI P,

(SELECT SUM(VALOR) AS SUMA, NOMBRE,ITEM FROM PRUEBA_UNAI WHERE ITEM LIKE 'BICI' GROUP BY NOMBRE,ITEM) GB ,

(SELECT SUM(VALOR) AS SUMA, NOMBRE,ITEM FROM PRUEBA_UNAI WHERE ITEM LIKE 'COCHE' GROUP BY NOMBRE,ITEM) GC

WHERE P.NOMBRE = GC.NOMBRE (+)

AND P.NOMBRE = GB.NOMBRE (+)
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

RE:Agrupar por columnas en vez de por filas

Publicado por tomas (6 intervenciones) el 10/10/2007 15:27:47
Ahora el problema que me surge es que si en un futuro aparece el item "triciclo" entonces tengo que tocar la sql....

Hay alguna manera de hacerlo? con pl/sql me imagino no?
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

RE:Agrupar por columnas en vez de por filas

Publicado por Isaias (5073 intervenciones) el 10/10/2007 17:59:57
¿PL/SQL?, Eso es Oracle, no?
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

RE:Agrupar por columnas en vez de por filas

Publicado por tomas (6 intervenciones) el 11/10/2007 12:08:01
Sí, es en oracle. En MSSql no se que lenguaje es que nunca me hecho ningún procedimiento, pero bueno tanto da....
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

RE:Agrupar por columnas en vez de por filas

Publicado por Isaias (5073 intervenciones) el 10/10/2007 17:55:18
La forma mas simple es:

SELECT nombre,
sum(case when item = bici then valor end) as Bici,
sum(case when item = coche then valor end) as Coche,
sum(case when item = etc then valor end) as etc
FROM tutabla
GROUP BY nombre

Saludos
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

RE:Agrupar por columnas en vez de por filas

Publicado por Khristian (9 intervenciones) el 11/10/2007 01:41:13
con las respuestas que te han dado, lo mas facil seria que construyeras la consulta en tiempo de ejecucion.

Cargas la lista de categorias, o recorres los campos con las categorias, y construyes la consulta de forma dinamica.
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

RE:Agrupar por columnas en vez de por filas

Publicado por tomas (6 intervenciones) el 11/10/2007 12:07:00
Sí, es buena idea.

Luego tengo el siguiente problema, que si en alguna de las subconsultas no sale algún nombre del cliente deja de salir en la consulta general ese cliente...(pero debería salir con el valor 0 en esa suma.... pense que el "isnull" haría eso pero no lo hace....)

Alguna idea? Me da que al final me voy a tener que hacer consultas por cliente y por tipo de item y generarme una estructura en la aplicación que luego ya imprima...
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

RE:Agrupar por columnas en vez de por filas

Publicado por Mou (1 intervención) el 01/01/2008 14:48:11
SELECT nombrecliente, Item, sum(valor) FROM Tabla1
GROUP BY nombreCliente, Item
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