Condividi tramite

Conteggio record in query

Anonimo
2014-12-17T09:30:53+00:00

Buongiorno a tutti,

ho una difficoltà nel creare una query che conteggi  delle occorrenze.

ho una tabella persone, con i dati relativi, e una tabella contatti che contiene le trattative effettuate con queste persone:

persona di riferimento (link alla tabella persone) data contatto oggetto del contatto trattativa conclusa (si può scegliere tra i valori 0 (non conclusa),1,2,3,4)

ciò che vorrei ottenere dalla query è una tabella di questo tipo:

persona di riferimento data contatto in cui la trattativa si è conclusa oggetto del contatto in quella data tipo di trattativa conclusa numero di contatti dall'inizio a quella data se è la prima trattativa conclusa, o dall'ultima conclusione di trattativa a quella data se c'è già stata una trattativa conclusa precedentemente

Ovviamente se avessi diviso i contatti con altre tabelle a seconda della trattativa sarebbe stato più semplice, ma in pratica non è sempre così diretto il rapporto contatto-trattativa... diciamo che ciò che voglio fare è una semplice tabella che mi indichi il numero di contatti medi prima che venga conclusa una trattativa.

Un esempio potrebbe essere il seguente:

Persona A 12-mar-14 aaa 0
Persona A 10-apr-14 bbb 1
Persona A 8-mag-14 cccc 0
Persona A 6-lug-14 ddd 0
Persona A 1-dic-14 eee 4

Ciò che vorrei ottenere è

Persona A 10-apr-14 bbb 1 2
Persona A 1-dic-14 eee 4 3

Ho già realizzato una query che estrae le prime tre colonne della tabella, ma non so proprio come contare il numero dei contatti trascorsi... Riesco solo a contare tutti i contatti avuti con quella persona.

Sapete aiutarmi?

Spero di aver spiegato sufficientemente il problema, ma se ci sono dubbi provvedo!

Grazie,

Raul

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

4 risposte

Ordina per: Più utili
  1. Anonimo
    2014-12-18T08:19:50+00:00

    Grazie Sandro.

    Scrivendo la query:

    SELECT Contatti.PersonaContattata, Contatti.Data, Contatti.TratConclusaCon, (SELECT COUNT(TratConclusaCon) FROM Contatti AS T1 WHERE T1.PersonaContattata=Contatti.PersonaContattata) AS cc

    FROM Contatti

    ORDER BY Contatti.PersonaContattata, Contatti.Data

    riesco a contare il numero di trattative concluse per ogni cliente (personacontattata), mentre con

    SELECT Contatti.PersonaContattata, Contatti.Data, Contatti.TratConclusaCon, (SELECT COUNT(Data) FROM Contatti AS T1 WHERE T1.PersonaContattata=Contatti.PersonaContattata) AS cc

    FROM Contatti

    ORDER BY Contatti.PersonaContattata, Contatti.Data

    riesco a contare il numero di trattative complessivo (concluse con successo e non). Però così facendo non riesco a contare il numero di trattative effettuate tra una trattativa concluse e la successiva.

    Seguendo i consigli di Giorgio Rancati nella discussione Conteggio condizionato dei record in una query.ho scritto queste due query: 

    SELECT C1.PersonaContattata, C1.Data, C1.TratConclusaCon, SUM(IIF(C2.TratConclusaCon>0,1,0)) AS Gruppo

    FROM Contatti AS C1 LEFT JOIN Contatti AS C2 ON C1.Data>C2.Data

    WHERE C1.PersonaContattata=C2.PersonaContattata

    GROUP BY C1.PersonaContattata, C1.Data, C1.TratConclusaCon;

    salvata come Q_GruppoTC, e

    SELECT G.PersonaContattata, G.Data, G.TratConclusaCon, G.Gruppo, SUM(IIF(G.TratConclusaCon>0,1,0)) AS NCont

    FROM q_GruppoTC AS G INNER JOIN q_GruppoTC AS G1 ON (G.Gruppo=G1.Gruppo) AND (G.Data>=G1.Data)

    WHERE G.PersonaContattata=G1.PersonaContattata

    GROUP BY G.PersonaContattata, G.Data, G.TratConclusaCon, G.Gruppo

    ORDER BY G.PersonaContattata, G.Data;

    Così facendo riesco a contare le occorrenze ma, essendoci C1.Data>C2.Data, il primo contatto di ogni persona non viene conteggiato... Al momento l'ho sistemato con una variabile NcontCorretta=Ncont+1 se Gruppo=0, ma perdo le persone con un solo contatto.

    Avete idee diverse/migliori per ottenere questo risultato?

    Grazie,

    Raul

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-12-17T21:14:00+00:00

    ciao Raul,

    nello statement sql suggerito al posto di tabella scrivi il nome della tabella contenente i campi che mostri nel post precedente.

    campo1, campo2, campox...sono i campi della della tua tabella che vuoi mostrare con query.

    al posto di select count(campo2) scrivi il nome del campo su che su sui applicare il conteggio nel tuo caso TratConclusaCon.

    facci sapere.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-12-17T13:14:14+00:00

    Grazie per la risposta Sandro.

    Perdonami, ma mi sono perso con i nomi...

    Nel caso spiegato sopra, la tabella "contatti" è la seguente:

    PersonaContattata Data Oggetto TratConclusaCon

    Se ho ben capito i campi campo1 e campo2 sono rispettivamente PersonaContattata e Data, tabella è "Contatti", ma poi nonho più capito la tabella o a cosa si riferisce.

    Inoltre, in questo modo riesco a far ripartire il conteggio tra un "TratConclusoCon">0 e l'altro?

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-12-17T11:06:08+00:00

    ciao Raul,

    come una subQuery del tipo :

    SELECT tabella.campo1, tabella.campo2,

                  (select count(campo2) from tabella o where o.campo2=tabella.campo2) AS cc

    FROM tabella

    ORDER BY tabella.campo2

    adattando i nomi al tuo caso specifico.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento