Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

[SOLUCIONADO] ¿Cómo resolver esto?

Estas en el tema de ¿Cómo resolver esto? en el foro de Bases de Datos General en Foros del Web. Siento que tenga un título tan poco descriptivo. He estado haciendo consultas similares, pero en este punto me quedo totalmente en blanco. Parto de una ...
  #1 (permalink)  
Antiguo 30/07/2015, 04:47
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
¿Cómo resolver esto?

Siento que tenga un título tan poco descriptivo.

He estado haciendo consultas similares, pero en este punto me quedo totalmente en blanco.

Parto de una relación de parcelas de una comunidad, las cuales tiene equivalencia con parcelas catastrales.

La mayoría de las veces la parcela de la comunidad equivale a una parcela catastral, pero hay casos en los que una parcela de la comunidad equivale a varias parcelas catastrales y al revés, que una parcela de la comunidad sea sólo una parte de una parcela catastral mayor.

La relación entre parcelas es de N:M, y está resuelta por medio de una tabla que las relaciona. Pero me quiero centrar por ahora en el primer caso, el que una parcela de la comunidad esté compuesta por varias catastrales.



Digamos que parto de estos registros que ya provienen de una selección entre parcelas de la comunidad y catastrales:
Código SQL:
Ver original
  1. (id)  | (propietario) | (parcela)  |  (Sup_Cdad)  | parcela_catastral)  | (Sup_Catastral)
  2. ____________________________________________________________________________________
  3. 1     | Fulano        | Parcela1   |  SC          | Parcela catastral1  | S1
  4. 2     | Fulano        | Parcela1   |  SC          | Parcela catastral2  | S2
  5. 3     | Fulano        | Parcela1   |  SC          | Parcela catastral3  | S3
  6. 4     | Fulano        | Parcela1   |  SC          | Parcela catastral4  | S4


Con SC=S1+S2+S3+S4

Si yo hago un SELECT así:
Código SQL:
Ver original
  1. SELECT propietario, parcela, Sup_Cdad, SUM(Sup_Catastral) AS Sup_CAT
  2. FROM relacion
  3. GROUP BY propietario, parcela,Sup_Cdad;

Mi salida será
Fulano | Parcela1 | SC | S1+S2+S3+S4

Pero pierdo la información de las parcelas catastrales, que no puedo incluirlas obviamente.

Y por fin la pregunta.....¿cómo puedo hacer para evitar duplicidades y al mismo no perder esa información de las parcelas catastrales?
__________________
Mi calculadora en Qt

Última edición por gnzsoloyo; 30/07/2015 a las 05:59 Razón: Legibilidad del SQL
  #2 (permalink)  
Antiguo 30/07/2015, 06:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿Cómo resolver esto?

Técnicamente, la consulta es correcta. La pregunta sería esxactamente cómo quieres ver los datos.
¿Podrías mostrarnos un ejemplo simulado de cómo debería quedar ese resultado para lo que necesitas?
Con eso tendríamos una idea de lo que hay que poner para lograrlo...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 02/08/2015, 11:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: ¿Cómo resolver esto?

Gracias como siempre, gnzsoloyo.

Bueno, cuando formulé la duda ni siquiera tenía claro cómo quería ver los datos.
Ya lo tengo claro, pero no sé cómo hacerlo.

Sería así:


Código SQL:
Ver original
  1. (id)  | (propietario) | (parcela)  |  (Sup_Cdad)  | parcela_catastral)  | (Sup_Catastral) | (Suma_Sup_Catastral)
  2. ______________________________________________________________________________________________________________
  3. 1     | Fulano        | Parcela1   |  SC          | Parcela catastral1  |   S1            |    S1+S2+S3+S4
  4. 2     | Fulano        | Parcela1   |  SC          | Parcela catastral2  |   S2            |    S1+S2+S3+S4
  5. 3     | Fulano        | Parcela1   |  SC          | Parcela catastral3  |   S3            |    S1+S2+S3+S4
  6. 4     | Fulano        | Parcela1   |  SC          | Parcela catastral4  |   S4            |    S1+S2+S3+S4


Siento haber sido tan poco claro en el otro mensaje.
__________________
Mi calculadora en Qt
  #4 (permalink)  
Antiguo 02/08/2015, 11:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: ¿Cómo resolver esto?

ok ese es el resultado, y se compone de que tablas?? cuales son los datos de las tablas???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 02/08/2015, 13:10
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: ¿Cómo resolver esto?

Hola:

Bueno, era un ejemplo sintetizando mi duda, pero lo he recreado así (espero que no quede muy largo):
Tabla parcela_cdad
Código SQL:
Ver original
  1. CREATE TABLE parcela_cdad
  2. (
  3.   id INTEGER NOT NULL,
  4.   parcela_cdad CHARACTER VARYING(30),
  5.   propietario CHARACTER VARYING(50),
  6.   sup_cdad NUMERIC,
  7.   CONSTRAINT parcelas_pkey PRIMARY KEY (id)
  8. )
Tabla parcela_cat
Código SQL:
Ver original
  1. CREATE TABLE parcela_cat
  2. (
  3.   id INTEGER NOT NULL,
  4.   parcela_cat CHARACTER VARYING(50),
  5.   sup_cat NUMERIC,
  6.   CONSTRAINT parcelas_cdad_pkey PRIMARY KEY (id)
  7. )

Tabla relacion
Código SQL:
Ver original
  1. CREATE TABLE relacion
  2. (
  3.   id INTEGER NOT NULL,
  4.   id_cdad INTEGER,
  5.   id_cat INTEGER,
  6.   CONSTRAINT relacion_pkey PRIMARY KEY (id),
  7.   CONSTRAINT relacion_id_cat_fkey FOREIGN KEY (id_cat)
  8.       REFERENCES parcela_cat (id) MATCH SIMPLE
  9.       ON UPDATE CASCADE ON DELETE CASCADE,
  10.   CONSTRAINT relacion_id_cdad_fkey FOREIGN KEY (id_cdad)
  11.       REFERENCES parcela_cdad (id) MATCH SIMPLE
  12.       ON UPDATE CASCADE ON DELETE CASCADE
  13. )


Y esta es la vista que uso para ver toda la información:
Código SQL:
Ver original
  1. CREATE OR REPLACE VIEW parcelas AS
  2.  SELECT parcela_cdad.propietario,
  3.     parcela_cdad.parcela_cdad,
  4.     parcela_cdad.sup_cdad,
  5.     parcela_cat.parcela_cat,
  6.     parcela_cat.sup_cat
  7.    FROM parcela_cat,
  8.     parcela_cdad,
  9.     relacion
  10.   WHERE relacion.id_cat = parcela_cat.id AND relacion.id_cdad = parcela_cdad.id;

La cual me dará una vista casi igual a como la deseo pero sin la última columna de la suma.

Saludos y gracias!

Esta sería una salida con datos:

Código SQL:
Ver original
  1. propietario   | parcela_cdad | sup_cdad | parcela_cat | sup_cat
  2. _______________________________________________________________
  3. Fulano        |  parcela1    |   250    |Parcela_cat_1| 50  
  4. Fulano        |  parcela1    |   250    |Parcela_cat_2| 120
  5. Fulano        |  parcela1    |   250    |Parcela_cat_3| 80
  6. Fulano        |  parcela1    |   250    |Parcela_cat_4| 100
  7. Mengano       |  parcela2    |   100    |Parcela_cat_5| 200
  8. Zutano        |  parcela3    |   100    |Parcela_cat_5| 200

Y esto lo que me gustaría:

Código SQL:
Ver original
  1. propietario   | parcela_cdad | sup_cdad | parcela_cat | sup_cat
  2. _______________________________________________________________
  3. Fulano        |  parcela1    |   250    |Parcela_cat_1| 50  | 50+120+80+100
  4. Fulano        |  parcela1    |   250    |Parcela_cat_2| 120 | 50+120+80+100
  5. Fulano        |  parcela1    |   250    |Parcela_cat_3| 80   | 50+120+80+100
  6. Fulano        |  parcela1    |   250    |Parcela_cat_4| 100 | 50+120+80+100
  7. Mengano       |  parcela2    |   100    |Parcela_cat_5| 200 |200
  8. Zutano        |  parcela3    |   100    |Parcela_cat_5| 200 | 200
__________________
Mi calculadora en Qt

Última edición por dehm; 02/08/2015 a las 13:23 Razón: Ampliar información
  #6 (permalink)  
Antiguo 02/08/2015, 15:24
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: ¿Cómo resolver esto?

Bueno, pues esta sería la consulta.
(Es específica de PostgreSQL)

Código SQL:
Ver original
  1. SELECT propietario, parcela_cdad, sup_cdad, parcela_cat, sup_cat, SUM(sup_cat) OVER (PARTITION BY parcela_cdad) AS total
  2. FROM parcelas;
__________________
Mi calculadora en Qt

Etiquetas: resolver, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:19.