SQL - Agrupar lineas duplicadas por ubicacion o lote

 
Vista:
sin imagen de perfil
Val: 3
Ha disminuido su posición en 13 puestos en SQL (en relación al último mes)
Gráfica de SQL

Agrupar lineas duplicadas por ubicacion o lote

Publicado por Nacho (2 intervenciones) el 30/04/2018 09:43:19
Buenos días, como puedo agrupar líneas de la consulta que pongo a continuación para que cuando tengan diferentes lotes o ubicaciones salgan en una sola línea sumadas y no en varias líneas (cuando es el mismo código de artículo me refiero) gracias!!:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
SELECT Clientes.NomCli, Clientes.NifCli, Clientes.CodCli,
       Clientes.DirCli1, Clientes.DtoCli, Clientes.PobCli,
       Clientes.NomFiscal, Clientes.DirFiscal, Clientes.DtoFiscal,
       Clientes.PobFiscal, Clientes.Generico, Clientes.TelCli,
       PaisCli.NomPais NomPaisCli,
       Provinci.NomProvi,
       ProviFiscal.NomProvi NomProviFiscal,
       Dirent.DirEnt1, Dirent.DtoEnt, Dirent.PobEnt, DirEnt.TelEnt1,
       ProviEnt.NomProvi NomProviDirEnt,
       PaisEnt.NomPais NomPaisDirEnt,
       PaisFiscal.NomPais NomPaisFiscal,
       Represen.NomRep,
       RefCli.referencia,
       Cabecera.TipoCont, Cabecera.Serie, Cabecera.NumDoc, Cabecera.Fecha,
       Cabecera.TotIvaMoneda, Cabecera.TotRecMoneda, Cabecera.TotMoneda, Cabecera.TotIrpfMoneda,
       Cabecera.RegIva, Cabecera.BaseMoneda BaseMonCab, Cabecera.TotAcuentaMoneda,
       Cabecera.PorIva1, Cabecera.PorRec1, Cabecera.PorIrpf, Cabecera.SuplidosMon,
       Cabecera.NomCli NomCliCabecera,
       Cabecera.via + ' '  + Cabecera.DirCli + ', ' + Cabecera.nvia+ ' ' +
       Cabecera.piso + ' ' + Cabecera.puerta + ' '  + Cabecera.escalera DirCliCabecera,
       Cabecera.DtoCli DtoCliCabecera, Cabecera.PobCli PobCliCabecera,
       Cabecera.NifCli NifCliCabecera,
       Cabecera.Referencia ReferenciaCabecera, Cabecera.TelCli TelCliCabecera,
       Cabecera.IdFacV,
       PaisCliCab.NomPais NomPaisCliCabecera,
       ProviCliCab.NomProvi NomProviCliCabecera,
       Lineas.CodArt, Lineas.DescLin, Lineas.Unidades, Lineas.PrcMoneda,
       Lineas.BaseMoneda, Lineas.Desc1, Lineas.Desc2, Lineas.Texto,
       Lineas.Desc3, Lineas.Desc4, Lineas.TipIva,
       Monedas.AbrMoneda,
       DocuPago.DescDoc,
       FormaPag.DescFor,
       Cartera1.Fecha FechaVen1, Cartera1.ImporteMon ImporteVen1,
       Cartera2.Fecha FechaVen2, Cartera2.ImporteMon ImporteVen2,
       Cartera3.Fecha FechaVen3, Cartera3.ImporteMon ImporteVen3,
   DatosConfig.IvaOIgic,
      DomBanca.IBANEXT, DomBanca.BICEXT, DomBanca.CUENTAEXT,DatosEmp.Imagen,
       CAST(Cabecera.MotivoRectificacion AS VARCHAR(500)) MotivoRectificacion
  FROM CabeFacV Cabecera WITH(NOLOCK)
    LEFT OUTER JOIN Dirent WITH(NOLOCK)
      ON ( Dirent.CodCli = Cabecera.CodCli AND
           Dirent.NumDir = Cabecera.NumDir)
    LEFT OUTER JOIN Paises PaisEnt WITH(NOLOCK)
      ON PaisEnt.CodPais =  DirEnt.CodPais
    LEFT OUTER JOIN Provinci ProviEnt(NOLOCK)
      ON ProviEnt.CodProvi = DirEnt.CodProvi
    LEFT OUTER JOIN Clientes WITH(NOLOCK)
      ON Clientes.CodCli = Cabecera.CodCliFac
    LEFT OUTER JOIN Paises PaisCli WITH(NOLOCK)
      ON PaisCli.CodPais =  Clientes.CodPais
    LEFT OUTER JOIN Paises PaisFiscal WITH(NOLOCK)
      ON PaisFiscal.CodPais =  Clientes.PaisFiscal
    LEFT OUTER JOIN Paises PaisCliCab WITH(NOLOCK)
      ON PaisCliCab.CodPais =  Cabecera.CodPais
    LEFT OUTER JOIN Provinci WITH(NOLOCK)
      ON Provinci.CodProvi = Clientes.CodProvi
    LEFT OUTER JOIN Provinci ProviCliCab WITH(NOLOCK)
      ON ProviCliCab.CodProvi = Cabecera.CodProvi
    LEFT OUTER JOIN Provinci ProviFiscal WITH(NOLOCK)
      ON ProviFiscal.CodProvi = Clientes.ProviFiscal
    LEFT OUTER JOIN LineFact Lineas WITH(NOLOCK)
      ON Lineas.IdFacV = Cabecera.IdFacV
    LEFT OUTER JOIN Represen WITH(NOLOCK)
      ON Represen.CodRep = Cabecera.CodRep
    LEFT OUTER JOIN DocuPago WITH(NOLOCK)
      ON DocuPago.DocPag = Cabecera.DocPag
    LEFT OUTER JOIN FormaPag WITH(NOLOCK)
      ON FormaPag.ForPag = Cabecera.ForPag
    LEFT OUTER JOIN Monedas WITH(NOLOCK)
      ON  ( Cabecera.CodMon = Monedas.CodMon)
    LEFT OUTER JOIN TiposCon WITH(NOLOCK)
      ON tiposcon.tipocont = Cabecera.tipocont
    LEFT OUTER JOIN DatosConfig WITH(NOLOCK)
      ON  datosconfig.idmultiemp = tiposcon.idmultiemp
    LEFT OUTER JOIN DatosEmp WITH(NOLOCK)
      ON datosemp.idmultiemp = tiposcon.idmultiemp
    LEFT OUTER JOIN DomBanca WITH(NOLOCK)
      ON ( DomBanca.NumDom = Cabecera.NumDom AND
           DomBanca.CodCli = Cabecera.CodCliFac)
    LEFT OUTER JOIN Cartera Cartera1(NOLOCK)
      ON ( Cartera1.NumCartera = Cabecera.NumCartera AND
           Cartera1.NumVen = ( SELECT Min( C.NumVen) NumVen
                                 FROM Cartera C WITH(NOLOCK)
                                 WHERE C.NumCartera = Cabecera.NumCartera AND
                                       C.Anticipo <> 'C' AND
                                       C.PadreDev = 0))
    LEFT OUTER JOIN Cartera Cartera2(NOLOCK)
      ON ( Cartera2.NumCartera = Cabecera.NumCartera AND
           Cartera2.NumVen = ( SELECT Min( C.NumVen) NumVen
                                 FROM Cartera C WITH(NOLOCK)
                                 WHERE C.NumCartera = Cabecera.NumCartera AND
                                       C.NumVen > Cartera1.NumVen AND
                                       C.Anticipo <> 'C' AND
                                       C.PadreDev = 0))
    LEFT OUTER JOIN Cartera Cartera3(NOLOCK)
      ON ( Cartera3.NumCartera = Cabecera.NumCartera AND
           Cartera3.NumVen = ( SELECT Min( C.NumVen) NumVen
                                 FROM Cartera C WITH(NOLOCK)
                                 WHERE C.NumCartera = Cabecera.NumCartera AND
                                       C.NumVen > Cartera2.NumVen AND
                                       C.Anticipo <> 'C' AND
                                       C.PadreDev = 0))
    LEFT OUTER JOIN RefCli WITH(NOLOCK)
      ON RefCli.CodCli = Clientes.CodCli
      AND RefCli.CodArt = Lineas.CodArt
    LEFT OUTER JOIN Articulo WITH(NOLOCK)
      ON Articulo.CodArt = Lineas.CodArt
  WHERE Cabecera.IdFacV = :nIdent
     AND Lineas.EsComponente = 'F'
     AND [CondicionesListado,Sysname,1=1]
  ORDER BY Cabecera.IdFacV, Lineas.OrdLin
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Agrupar lineas duplicadas por ubicacion o lote

Publicado por leonardo_josue (1173 intervenciones) el 30/04/2018 18:44:46
Hola Nacho:

Tratar de entender tu consulta resulta tan simple como tratar de encontrar la teoría unificada de la física cuántica O_o... en otras palabras sólo Dios o un verdadero genio lo podrán hacer.

No nos das detalles sobre tu modelo de BD's ni pones datos de ejemplo que nos puedan ayudar a entender donde está el problema. Te sugiero que trates de simplificar lo más que puedas, postea la estructura de tus tablas (no de todas, ya que es una consulta bastante compleja, pero al menos de aquellas que intervengan directamente en lo que planteas) y a partir de esos datos dinos qué es lo que esperas obtener como salida.

investiga un poco acerca de la función de agrupación SUM y pregúntale a San GOOGLE cómo funcionan la cláusula GROUP BY, estoy seguro de que encontraras bastantes ejemplos que te puedan ayudar.

Saludos
Leo.
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
sin imagen de perfil
Val: 3
Ha disminuido su posición en 13 puestos en SQL (en relación al último mes)
Gráfica de SQL

Agrupar lineas duplicadas por ubicacion o lote

Publicado por Nacho (2 intervenciones) el 02/05/2018 10:31:34
Buenas, si la verdad que no está muy claro, lo tendré en cuenta en otro momento que necesite ayuda, en todo caso ya conseguí solucionarlo, por si a alguien le sirve de ayuda, conseguí agruparlo con la función STUFF, que te permite agrupar varios campos en una misma línea, en mi caso era para ponerlo en un formato de impresión. 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