Toon posts:

[SQL] [ACCESS] hulpquerys samenvoegen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor een callcentre programma moet ik een selectie van bedrijven maken die binnen een bepaalde regio vallen en aan een aantal voorwaarden voldoen.

Aangezien het een redelijk complexe query is, heb ik het opgedeeld in een aantal kleinere hulpquerys die elkaar gebruiken. Nu is het de bedoeling om, als dat mogelijk is, deze kleine hulpquerys te integreren tot een grote (snellere) query. :Y)

Ik zal eerst de situatie proberen te schetsen zodat het voor jullie duidelijk is waar het om gaat :)

De selectie van bedrijven moet aan de volgende voorwaarden voldoen:
  • De bedrijven vallen binnen de regio van de betreffende verkoper
    • Bedrijven die nog nooit gebeld zijn
    • Bedrijven die gebeld zijn, en die om verschilllende redenen na een x tijd moeten worden teruggebeld. Bijv. bij 'geen interesse' wordt er na een half jaar teruggebeld
    • Bedrijven die een terugbelafspraak gemaakt hebben, die of volgende week teruggebeld willen worden, of de volgende dag op een specifiek tijdstip.
Deze gegevens worden uit 3 tabellen gehaald:
  • bedrijf hierin staan natuurlijk alle bedrijfsgegevens etc ;)
  • gesprekken een soort log tabel, hierin staan alle uitkomsten van de gesprekken + de status die het gesprek heeft opgeleverd bijv. niet thuis, in gesprek etc. etc.
  • terugbellen bedrijven die teruggebeld moeten worden.
En nu mijn vraag: Hoe kan ik deze query het beste integreren? zijn er sql commando's die ik niet gebruikt heb, waardoor de query een stuk korter kan worden.

Even om misverstanden te voorkomen: ik vraag dus niet of jullie mijn code willen fixen, maar puur om tips of een andere denkwijze voor dit pobleem. Alle suggesties zijn welkom. :7

code:
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
// Alle bedrijven die in de regio van de verkoper vallen.

** qryVerkoper **

Select b.* 
from Bedrijf as b
Where b.verkoperID = 1;

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

   //De bedrijven die nog nooit zijn gebeld, en dus niet in de tabel gesprekken voorkomen

   ** qryEnOf **

   select v.*
   from qryVerkoper as v
   where not exists (
      select * 
      from gesprekken g
      where g.bedrijfsid = v.bedrijfsid
      )

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

   // De bedrijven die al een keer gebeld zijn, afhankelijk van de     
   // gespreksstatus van het laatst gevoerde gesprek komen ze wel of niet in de
   // lijst

   ** qryEnEn **

   select max (g.beldatum) as beldatum, g.bedrijfsid
   from gesprekken as g, qryVerkoper as v
   where v.bedrijfsid = g.bedrijfsid
   group by g.bedrijfsid


      ** qryLaatsteGesprek **

      select distinct g.*
      from gesprekken as g, qryEnEn as e
      where e.bedrijfsid = g.bedrijfsid and g.beldatum = e.beldatum

         ** qryStatusFilter ** 

         select *
         from qryLaatstGesprek
         where (gespreksstatus = 'geen interesse' and terugbeldatum <= now()) or
           (gespreksstatus = 'afspraak' and isklant = false and terugbeldatum <= now()) or
           (gespreksstatus = 'afspraak' and isklant = true and terugbeldatum <= now()) or
           (gespreksstatus = 'in gesprek') or
           (gespreksstatus = 'antwoord apperaat') or
           (gespreksstatus = 'niet aanwezig');

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

   // De bedrijven waarvan is aangegeven dat ze teruggebeld moeten worden

   ** qryTerugbellen **

   select t.bedrijfsid, max(t.beldatum) as beldatum
   from terugbellen as t, bedrijf as b
   where t.bedrijfsid = b.bedrijfsid and t.gespreksstatus = 'terugbellen'
   group by t.bedrijfsid;

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

   //Voeg de resulaten van de voorgaande querys samen tot 1 tabel

   ** qryRegioIDs ** 

   Select Bedrijfsid from qryStatusFilter
   union select Bedrijfsid from qryTerugbellen
   union select bedrijfsid from qryEnOf;

      ** qryRegio ** 
      
      select b.*
      from bedrijf as b, qryRegio as r
      where r.bedrijfsid = b.bedrijfsid

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Uhm, zo op het eerste oog: Al eens van Joins gehoord? Je moet een left/inner/outer/right join gebruiken.

disclaimer: op het eerste oog dus he?

[ Voor 50% gewijzigd door RobIII op 05-11-2003 14:34 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij