SQL - consula sql

   
Vista:

consula sql

Publicado por johnny (8 intervenciones) el 24/09/2008 18:24:32
Buenas, tengo una tabla:
Ingresos(Codigo, Empresa, Trimestre, Base, IVA, Total)

En trimestre puede ser 1,2,3 o 4.

Me gustaria hacer una consulta que me saque el nombre de la empresa, el total del 1º trimestre, 2º, 3º, 4º y el total de los 4..

Yo hago esta consulta para que me saque el total del 1º trimestre de cada empresa:

SELECT Empresa, SUM(Total) As Total_primer_trimestre
FROM Ingresos
WHERE Trimestre=1
GROUP BY Empresa;

Esto me saca un listado de las empresas con el total del 1º trimestre de cada una, no?
Como puedo sacar un listado de las empresas con el total del 1º,2º, 3º y 4º trimestre, y el total de los 4?

Me vuelvo loco.. habia pensado en consulta dentro de otra consulta, pero tampoco se muy bien como hacerlo...

Alguna ayuda?

Gracias!
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:consula sql

Publicado por Isaias (5073 intervenciones) el 24/09/2008 20:12:31
Elimina el WHERE

SELECT Empresa, SUM(Total) As Total_primer_trimestre
FROM Ingresos
GROUP BY Empresa;
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:consula sql

Publicado por johnny (8 intervenciones) el 25/09/2008 10:52:26
Si elimino el WHERE me dara el total de todos los trimestres, esta claro, y si en lugar de "WHERE Trimestre=1" pongo "WHERE Trimestre=2" m dara el total del 2º trimestre en cada empresa, y asi con todos los demas...

Esta claro que puedo hacer muchas consultas dandome el resultado que quiero, por ejemplo, una consulta que me de el resultado del 1º trimestre, otra del 2º, otra del 3º, otra del 4º y otra del total de todos, pero yo lo que busco es todas las consultas en una...

El resultado deberia ser:

Empresa,Total_primer_trimestre,Total_segundo_trimestre,Total_tercer_trimestre,Total_cuarto_trimestre, total(la suma de todos los trimestres).

Alguna idea mas?

Gracias por tu ayuda :)
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:consula sql

Publicado por Efren (21 intervenciones) el 25/09/2008 17:02:10
Agrupalo por trimestre tambien y quitale el Where como dice Isaias..

SELECT Empresa, Trimestre, SUM(Total) As Total_primer_trimestre
FROM Ingresos
GROUP BY Empresa, Trimestre

Te daria algo asi:
Empresa Trimestre Total_primer_trimestre
EMP1 1 00.000
EMP2 2 00.000
EMP3 3 00.000

Asi te dara el total por empresa y trimestre.. :)

Ahora que si lo que quieres es verlo en un solo registro com dices en tu comentario
"Empresa,Total_primer_trimestre,Total_segundo_trimestre,Total_tercer_trimestre,Total_cuarto_trimestre, total(la suma de todos los trimestres). "

Usa la sentencia case para cambiarlos de posicion

espero te ayude..
buen dia
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:consula sql

Publicado por Isaias (5073 intervenciones) el 25/09/2008 18:54:45
Esta fue mi respuesta en otro foro:

Si, me falto decirte que incluyeras el trimestre en la lista
de tus campos, hay veces (es un error), asumimos que es LOGICO hacer las cosas, pero en esto, casi nada es logico, perdon..............

SELECT Empresa, Trimestre, SUM(Total) As Total_primer_trimestre
FROM Ingresos
GROUP BY Empresa, Trimestre;
Ahora bien, si lo quieres en forma de COLUMNAS (totales por trimetre), tendrias que "voltear" (darle un giro a) tus registros, eso lo haces con un CASE si usas 2000, si usas 2005, entonces CTE"s.
Aqui un ejemplo con 2000:
Tabla:
Year Quarter Amount
-------------------------------

1995 1 125,000.90
1995 2 136,000.75
1995 3 212,000.34
1995 4 328,000.82
1996 3 728,000.35
1996 2 422,000.13
1996 1 328,000.82
Resultado:
YEAR Q1 Q2 Q3 Q4
-------------------------------------------------------------------

1995 125,000.90 136,000.75 212,000.34 328,000.82
1996 328,000.82 422,000.13 728,000.35 0.00
Solucion:
SELECT YEAR,
Q1= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 1 AND YEAR =
Q.YEAR),0),
Q2= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 2 AND YEAR =
Q.YEAR),0),
Q3= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 3 AND YEAR =
Q.YEAR),0),
Q4= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 4 AND YEAR =
Q.YEAR),0)
FROM QTRSALES Q
GROUP BY YEAR
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:consula sql

Publicado por johnny (8 intervenciones) el 25/09/2008 23:13:24
Muchas gracias a los dos, sois muy grandes, jajaja... como no se me ha ocurrido a mi antes.. :XD

Esta claro que de la otra forma queda mucho mas bonito y mas vistoso, pero la verdad es que no me aclaro mucho con el case....

¿Me podrias decir como quedaria la consulta segun mi tabla para que me quedara en columnas si no es mucha molestia explicandomelo un poquitin para yo aprender? Es que en el ejemplo que me enviaste no mencionas ningun atributo de la tabla Ingresos...

Yo lo he intentado de esta forma aplicando tu ejemplo a mi tabla Ingresos, pero me da error:

SELECT Empresa,
Q1= ISNULL((SELECT AMOUNT FROM Ingresos WHERE Trimestre = 1 AND Empresa =
i.Empresa),0),
Q2= ISNULL((SELECT AMOUNT FROM Ingresos WHERE Trimestre = 2 AND Empresa =
i.Empresa),0),
Q3= ISNULL((SELECT AMOUNT FROM Ingresos WHERE Trimestre = 3 AND Empresa =
i.Empresa),0),
Q4= ISNULL((SELECT AMOUNT FROM Ingresos WHERE Trimestre = 4 AND Empresa =
i.Empresa),0)
FROM Ingresos i
GROUP BY Empresa

Que es lo que tengo mal?

Muchas gracias por vuestros consejos, ayudas, etc.. :)
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