Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150

    select per ricavare regioni da lista provincia

    Ciao a tutti,
    non avendo trovato un forum dedicato esclusivamente all'ambiente db, vi scrivo qui sperando di non essere andato OT.

    Il problemino è questo.

    Ho due tabelle:
    1. PROVINCIE
    che contiene tutte le provincie e le relative regioni.
    Entrambe presentano dei codi di riferimento (in particolare quelli istat)

    2. CLIENTE_REGIONE_PROVINCIA
    Su questa tabella ho tre campi

    Codice_cliente
    codice_regione
    codice_provincia

    Dove il codi_cliente e il codice_provincia sono valorizzati, mentre il codice_regione no.

    Che devo fare?
    Devo aggiornare il codice_regione SOLO SE il cliente presenta tutte le provincie di una determinata regione.

    Qundi se il cliente Tizio presenta PE/CH/TE/AQ e RM/RI dovrà avere valorizzato il campo codice_regione solo delle provincie dell'Abruzzo (PE/CH/TE/AQ), mentre RM e RI rimarrà a null

    Qualcuno a un'idea.
    Sarebbe magnifico anche una sola select, ma in caso contrario anche un algoritmo, che poi penso io a tradurre (nel mio caso in PL/SQL)

    grazie a tutti
    ciao ciao

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Moderazione

    Qui si parla anche di database e linguaggio SQL, quindi è il posto giusto.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    perfetto!

    Finora ho utilizzato questo forum (il migliore della rete) per ASP, HTML, CSS... e non sapevo se esisteva qualcosa su SQL e database

    Spero di trovare una risposta anche a questo mio problema.

    :master:

    ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    Allego script di creazione delle due tabelle e un paio di insert, per capire meglio il problema.

    Il risultato dovrebbe essere che viene aggiornato il campo codi_regi solo nel caso delle proncie della regione Lazio. Mentre non le tre della regione Abruzzo (manca CHIETI), nè chiaramente quella di Napoli

    create table provincie_temp(
    DESC_PROV varchar2(20) not null,
    CODI_PROV VARCHAR2(3) not null,
    CODI_REGI VARCHAR2(3) not null)


    insert into provincie_temp values ('L''AQUILA','066','130');
    insert into provincie_temp values ('CHIETI','069','130');
    insert into provincie_temp values ('PESCARA','068','130');
    insert into provincie_temp values ('TERAMO','067','130');
    insert into provincie_temp values ('ROMA','058','120');
    insert into provincie_temp values ('RIETI','057','120');
    insert into provincie_temp values ('VITERBO','056','120');
    insert into provincie_temp values ('LATINA','059','120');
    insert into provincie_temp values ('FROSINONE','060','120');
    insert into provincie_temp values ('NAPOLI','063','150');


    create table cliente_prov_regi(
    codi_clie number(6) not null,
    codi_regi VARCHAR2(3) ,
    codi_prov VARCHAR2(3) not null)



    insert into cliente_prov_regi values ('1',NULL,'058');
    insert into cliente_prov_regi values ('1',NULL,'057');
    insert into cliente_prov_regi values ('1',NULL,'056');
    insert into cliente_prov_regi values ('1',NULL,'059');
    insert into cliente_prov_regi values ('1',NULL,'060');
    insert into cliente_prov_regi values ('1',NULL,'066');
    insert into cliente_prov_regi values ('1',NULL,'067');
    insert into cliente_prov_regi values ('1',NULL,'068');
    insert into cliente_prov_regi values ('1',NULL,'063');

    ciao ciao

  5. #5
    Originariamente inviato da mosquito70
    Allego script di creazione delle due tabelle e un paio di insert, per capire meglio il problema.

    Il risultato dovrebbe essere che viene aggiornato il campo codi_regi solo nel caso delle proncie della regione Lazio. Mentre non le tre della regione Abruzzo (manca CHIETI), nè chiaramente quella di Napoli



    ciao ciao
    Ciao,

    siccome con oracle non ci smanetto molto
    ti riporto una possibile soluzione con SQl Server
    ma che probabilmente va già bene anche per oracle
    (alla fine il tutto può essere fatto con un'unica frase SQL come hai chiesto)

    Nota : mettendomi nel caso peggiore ho ipotizzato
    che in cliente_prov_regi un codi_clie possa comparire più volte
    con la stessa codi_prov.

    -------------------------------------------------------------------

    Con questa che segue trovi tutti i record di cliente_prov_regi
    che, in base alla tua tabella provincie_temp, hanno tutte le provincie

    NOTA BENE che, nonostante quanto hai detto :
    "provincie_temp contiene tutte le provincie"
    c'è pure NAPOLI perchè hai postato dei dati di esempio non aderenti alla realtà

    codice:
    -- questa in seguito la battezziamo come  q3
      select q2.codi_clie, q1.codi_regi,q1.NumProv from
      ( 
       select codi_regi, count(*) as NumProv
       from provincie_temp
       group by codi_regi
      ) as q1
      Inner join
      (
       select codi_clie , pt.codi_regi, count(distinct(pt.codi_prov)) as NumDistProv
       from cliente_prov_regi  cpr inner join  provincie_temp pt
       on cpr.codi_prov=pt.codi_prov
       group by codi_clie ,pt.codi_regi
      ) as q2 on 
      q1.codi_regi=q2.codi_regi and q1.NumProv=q2.NumDistProv
    a partire da quella sopra trovi le relative provincie;

    codice:
    -- questa in seguito la battezziamo come  q4
    select pt1.codi_prov, pt1.codi_regi
     from provincie_temp pt1
     Inner join
     --  Ini q3
     (
      select q2.codi_clie, q1.codi_regi,q1.NumProv from
      ( 
       select codi_regi, count(*) as NumProv
       from provincie_temp
       group by codi_regi
      ) as q1
      Inner join
      (
       select codi_clie , pt.codi_regi, count(distinct(pt.codi_prov)) as NumDistProv
       from cliente_prov_regi  cpr inner join  provincie_temp pt
       on cpr.codi_prov=pt.codi_prov
       group by codi_clie ,pt.codi_regi
      ) as q2 on 
      q1.codi_regi=q2.codi_regi and q1.NumProv=q2.NumDistProv
     ) as q3
    -- fine q3 
    on pt1.codi_regi=q3.codi_regi
    metti tutto insieme e, sostituendo la prima SELECT con un UPDATE FROM,
    il gioco dovrebbe essere fatto (a meno di fesserie ovviamente )

    codice:
    select cpr1.*,q4.*
    from cliente_prov_regi cpr1
    Inner join 
    (
     --ini q4
     select pt1.codi_prov, pt1.codi_regi
     from provincie_temp pt1
     Inner join
     (
      --Ini q3
      select q2.codi_clie, q1.codi_regi,q1.NumProv from
      ( 
       select codi_regi, count(*) as NumProv
       from provincie_temp
       group by codi_regi
      ) as q1
      Inner join
      (
       select codi_clie , pt.codi_regi, count(distinct(pt.codi_prov)) as NumDistProv
       from cliente_prov_regi  cpr inner join  provincie_temp pt
       on cpr.codi_prov=pt.codi_prov
       group by codi_clie ,pt.codi_regi
      ) as q2 on 
      q1.codi_regi=q2.codi_regi and q1.NumProv=q2.NumDistProv
     ) as q3
     --Fine q3
    on pt1.codi_regi=q3.codi_regi
    )as q4 
    --Fine q4
    on cpr1.codi_prov=q4.codi_prov
    Ciao Ciao

    P.S. buona idea postare le create table ed insert into

    (nonostante il parere contrario di qualcuno )

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.