Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-08-2006
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Red face ORDER BY con GROUP BY y funciones de agregado

Hola compañeros.
Estoy intentando implementar una consulta SQL un tanto sencilla, pero que no logro a pesar de ver la ayuda del Transac_SQL.

Expongo:Tengo dos tablas, una maestra con cabeceras y otra esclava con las líneas de detalle.
La tabla de cabeceras se puede entender en este caso como si fuesen facturas, y la de líneas de detalle como las líneas de factura, p.e.

Así pues, con la consulta que expongo a continuación obtengo todas las líneas de facturas agrupadas por el codigo de artículo.

Código SQL [-]
/* Retorna totes les unitats de les valoracions economiques de totes les certificacions agrupades per còdig d'unitat*/

CREATE PROCEDURE ADOSP_Unidades_Anuales

/* Parametres */
@NumCen_sp varchar(3), @FecIni_sp datetime, @FecFin_sp datetime

AS
SELECT DISTINCT
   CabVal_Gesa.CodAut_CabVal, CabVal_Gesa.NumCen_CabVal, CabVal_Gesa.FecCer_CabVal,
   LinVal_Gesa.Codigo_LinVal, LinVal_Gesa.CodUni_LinVal, LinVal_Gesa.NumUni_LinVal, LinVal_Gesa.DesUni_LinVal, LinVal_Gesa.MatEuros_LinVal, LinVal_Gesa.ManEuros_LinVal

FROM
   CabVal_Gesa 
   /* Unisc per C.Aj */
   LEFT OUTER JOIN LinVal_Gesa
   ON CabVal_Gesa.CodAut_CabVal = LinVal_Gesa.Codigo_LinVal

WHERE  
   ( 
            (CabVal_Gesa.NumCen_CabVal LIKE '%' + @NumCen_sp + '%' )
   AND (CabVal_Gesa.FecCer_CabVal >= @FecIni_sp  AND CabVal_Gesa.FecCer_CabVal <= @FecFin_sp)
   )


ORDER BY LinVal_Gesa.CodUni_LinVal
GO


Lo que me gustaría obtener es: en lugar de todas las líneas de todas las facturas agrupadas por el código de artículo de las mismas, desearía obtener todos los artículos que se han facturado en líneas de las facturas acumulando los totales de los mismos en una sóla linea por cada uno de los artículos.

Algo así (resumiendo en número de columnas respecto del código anexo original):
Código Delphi [-]
ARTICULO   TOTAL UNI.FACTURADAS AÑO          PRECIO                  TOTAL
--------------------------------------------------------------------------
A                     10                 5                           50
B                     20                10                          200
C                     100                20                          200

Si me podeis ayudar....., gracias.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #2  
Antiguo 03-08-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Cita:
desearía obtener todos los artículos
Cita:
sóla linea por cada uno de los artículos.
Siento alguna contradiccion o mi no entender

Sin entender podria decir que deberias utilizar Group By CodigoArticulo y en el area del Select agregar un Sum(Total).

Saludos
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!

Última edición por vtdeleon fecha: 03-08-2006 a las 16:42:25.
Responder Con Cita
  #3  
Antiguo 04-08-2006
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Cool

Si eso es lo que buscaba, más o menos, ya que el group by agruparía (valga la redundancia) todas las líneas de los artículos, pero yo además no quiero sacar todas las líneas agrupadas de un mismo artículo sino por cada grupo de esos artículos debería salir una sóla línea con el sumatorio de las cantidades de todas las líneas pertenecientes al determinado artículo. Gracias.
Pero la sintaxis és la que me puede en este caso, ya que no logro hacer una sintaxis correcta.
No obstante lo he resuelto con algorítmica, y es por ello por lo que me he conectado, para publicarla.
Pero preferiría, claramente, hacer el proceso en el servidor.. claro, en lugar de en la consola del cliente.

Gracias.

Código Delphi [-]
 // Ara he de recorrer tota la consulta per agrupar en una mateixa linea tots els valors
     Final_w             := False;
     Cantidad_unidades_w := 0;

     DMCertGESA.ADOSP_InfUniAny.First;
     if(DMCertGESA.ADOSP_InfUniAny.RecNo = DMCertGESA.ADOSP_InfUniAny.RecordCount) then
        Final_w := true;
     NumUni_ant := DMCertGESA.ADOSP_InfUniAnyCodUni_LinVal.value;
     DMCertGESA.ADOSP_InfUniAny.Next;

     if(DMCertGESA.ADOSP_InfUniAny.RecNo = DMCertGESA.ADOSP_InfUniAny.RecordCount) then
        Final_w := true;

     while not(DMCertGESA.ADOSP_InfUniAny.Eof) and (not(Final_W)) do
     begin
         if(NumUni_ant = DMCertGESA.ADOSP_InfUniAnyCodUni_LinVal.value) then
         begin
            NumUni_ant          := DMCertGESA.ADOSP_InfUniAnyCodUni_LinVal.value;
            Cantidad_unidades_w := DMCertGESA.ADOSP_InfUniAnyNumUni_LinVal.Value;
            DMCertGESA.ADOSP_InfUniAny.Prior;
            DMCertGESA.ADOSP_InfUniAny.Edit;
            DMCertGESA.ADOSP_InfUniAnyNumUni_LinVal.Value := DMCertGESA.ADOSP_InfUniAnyNumUni_LinVal.Value + Cantidad_unidades_w;
            DMCertGESA.ADOSP_InfUniAny.Post;
            DMCertGESA.ADOSP_InfUniAny.Next;
            DMCertGESA.ADOSP_InfUniAny.Delete;
            Cantidad_unidades_w := 0;
         end
         else
         begin
            NumUni_ant := DMCertGESA.ADOSP_InfUniAnyCodUni_LinVal.value;
            DMCertGESA.ADOSP_InfUniAny.Next;
         end;

         if(DMCertGESA.ADOSP_InfUniAny.RecNo = DMCertGESA.ADOSP_InfUniAny.RecordCount) then
            Final_w := true;
     end;
     DMCertGESA.ADOSP_InfUniAny.First;
     // ****** Fin de l'agrupació de les unitats acumulan-les a la mateixa linea
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Agregado Calculado seb@ OOP 3 26-04-2016 01:55:04
consultas anidadas: group by dentro otro group by DobleSiete SQL 7 31-01-2005 14:59:31
Order by VRO SQL 6 31-08-2004 08:17:05
Agregado, Filtro, ClientDataSet, Problema en Count() andre Conexión con bases de datos 1 23-07-2004 14:47:07
Group Header, Detail y Footer Group en la misma pagina MarcelRuz Impresión 0 20-04-2004 23:27:14


La franja horaria es GMT +2. Ahora son las 00:58:48.


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
Copyright 1996-2007 Club Delphi