Apvienošanas vaicājuma izmantošana vairāku vaicājumu apvienošanai vienā rezultātā

Apvienošanas vaicājuma izmantošana vairāku vaicājumu apvienošanai vienā rezultātā

Dažkārt, iespējams, vēlēsities sarakstā iekļaut ierakstus no vienas tabulas vai vaicājuma kopā ar ierakstiem no vienas vai vairākām citām tabulām, lai izveidotu vienu ierakstu kopu — sarakstu ar visiem ierakstiem no divām vai vairākām tabulām. Šāds ir apvienošanas vaicājuma mērķis programmā Access.

Lai efektīvi izprastu apvienošanas vaicājumus, vispirms apgūstiet vienkāršu atlases vaicājumu noformēšanu programmā Access. Papildinformāciju par atlases vaicājumu noformēšanu skatiet rakstā Vienkārša atlases vaicājuma izveide.

Piezīme.: Šī raksta saturs attiecas uz datorā saglabātām Access datu bāzēm. Apvienošanas vaicājumus nevar izveidot vai lietot Access tīmekļa datu bāzēs Access tīmekļa programmās.

Apvienošanas vaicājuma piemēra, kas darbojas, izpēte

Ja iepriekš nekad neesat veidojis apvienošanas vaicājumu, iespējams, būs noderīgi vispirms izpētīt Northwind Access veidnē iekļautu piemēru, kas darbojas. Northwind veidnes paraugu varat meklēt Access darba sākšanas lapā, noklikšķinot uz Fails > Jauns vai tieši lejupielādējot kopiju no šīs atrašanās vietas: Northwind veidnes paraugs.

Kad programma Access atver Northwind datu bāzi, aizveriet pieteikšanās dialoga veidlapu, kas tiek rādīta pirmā, un pēc tam izvērsiet navigācijas rūti. Noklikšķiniet navigācijas rūts augšdaļā un atlasiet Objekta tips, lai kārtotu visus datu bāzes objektus pēc to tipa. Pēc tam izvērsiet grupu Vaicājumi, lai redzētu vaicājumu Darījumi ar precēm.

Apvienošanas vaicājumus var viegli atšķirt no citiem vaicājumu objektiem, jo tiem ir īpaša ikona, kas līdzinās diviem savstarpēji savietotiem apļiem, kuri atveido divu kopu apvienojuma kopu:

Ekrānuzņēmums ar apvienošanas vaicājuma ikonu programmā Access.

Atšķirībā no parastajiem atlases un darbību vaicājumiem, apvienošanas vaicājumā tabulas nav saistītas, kas nozīmē to, ka Access grafisko vaicājumu noformētāju nevar izmantot, lai veidotu vai rediģētu apvienošanas vaicājumus. To redzēsit, ja atvērsit apvienošanas vaicājumu no navigācijas rūts: programma Access to atvērs un rezultātus parādīs datu lapas skatā. Cilnē Sākums zem komandas Skati pamanīsit, ka Noformējuma skats nav pieejams, kad strādājat ar apvienošanas vaicājumiem. Strādājot ar apvienošanas vaicājumiem, varat pārslēgties tikai starp Datu lapas skats un SQL skats.

Lai turpinātu savu šī apvienošanas vaicājuma piemēra izpēti, noklikšķiniet uz Sākums > Skati > SQL skats un skatiet SQL sintaksi, kas to definē. Šajā attēlā SQL kodā pievienojām dažas papildu atstarpes, lai jūs ērtāk varētu atšķirt dažādās daļas, kas veido apvienošanas vaicājumu.

Jūsu pārlūkprogramma neatbalsta video. Instalējiet Microsoft Silverlight, Adobe Flash Player vai Internet Explorer 9.

Detalizēti izpētīsim šī Northwind datu bāzes apvienošanas vaicājuma SQL sintaksi:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], [Quantity]
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity]
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Šī SQL priekšraksta pirmā un trešā daļa pēc būtības ir divi atlases vaicājumi. Šie vaicājumi izgūst divas dažādas ierakstu kopas: vienu no tabulas Preču pasūtījumi un otru no tabulas Preču pirkumi.

Otrā šī SQL priekšraksta daļa ir atslēgvārds UNION, kas programmai Access norāda, ka šis vaicājums apvienos abas šīs ierakstu kopas.

Pēdējā šī SQL priekšraksta daļa nosaka apvienoto ierakstu kārtošanu, izmantojot priekšrakstu ORDER BY. Šajā piemērā Access visus ierakstus dilstošā secībā sakārtos pēc lauka Pasūtījuma datums.

Piezīme.: Programmā Access apvienošanas vaicājumi vienmēr ir tikai lasāmi; datu lapas skatā jūs nevarat mainīt nekādas vērtības.

Apvienošanas vaicājuma izveide, veidojot un kombinējot atlases vaicājumus

Lai gan apvienošanas vaicājumu varat izveidot, SQL skatā tieši rakstot SQL koda sintaksi, iespējams, ērtāk būs veidot to pa daļām, izmantojot atlases vaicājumus. Pēc tam šīs SQL koda daļas varat kopēt un ielīmēt kombinētajā apvienošanas vaicājumā.

Ja vēlaties izlaist darbību aprakstu un tā vietā noskatīties piemēru, skatiet nākamo sadaļu Apvienošanas vaicājuma veidošanas piemēra skatīšanās.

  1. Cilnes Izveide grupā Vaicājumi noklikšķiniet uz Vaicājuma noformējums.

  2. Dialoglodziņā Tabulas rādīšana veiciet dubultklikšķi uz tabulas, kuras laukus vēlaties iekļaut vaicājumā. Tabula tiks pievienota vaicājuma noformējuma logā.

  3. Aizveriet dialoglodziņu Tabulas rādīšana.

  4. Vaicājuma noformējuma logā veiciet dubultklikšķi uz katra lauka, kuru vēlaties iekļaut vaicājumā.Atlasot laukus, nodrošiniet, lai pārējos atlases vaicājumos tiktu pievienots vienāds lauku skaits un to kārtība būtu vienāda. Pievērsiet īpašu uzmanību katra lauka datu tipam un nodrošiniet, lai lauku datu tipi būtu saderīgi ar citos apvienošanai paredzētajos vaicājumos atbilstošajās pozīcijās esošo lauku datu tipiem. Piemēram, ja pirmajā atlases vaicājumā ir pieci lauki, no kuriem pirmajā laukā ir iekļauti datuma/laika dati, nodrošiniet, lai visos pārējos apvienošanai paredzētajos atlases vaicājumos arī būtu pieci lauki, no kuriem pirmajā laukā būtu iekļauti datuma/laika dati utt.

  5. Ja vēlaties, pievienojiet kritērijus saviem laukiem, lauku režģa rindā Kritēriji ierakstot atbilstošas izteiksmes.

  6. Pēc lauku un to kritēriju pievienošanas izpildiet šo atlases vaicājumu un pārskatiet tā izvadi. Cilnes Noformējums grupā Rezultāti noklikšķiniet uz Izpildīt.

  7. Ieslēdziet noformējuma skatu.

  8. Saglabājiet atlases vaicājumu, bet neaizveriet to.

  9. Atkārtojiet šoi procedūru ar katru apvienošanai paredzēto atlases vaicājumu.

Tagad, kad esat izveidojis savus atlases vaicājumus, ir pienācis laiks tos kombinēt. Šajā darbībā izveidosit apvienošanas vaicājumu, kopējot un ielīmējot SQL priekšrakstus.

  1. Cilnes Izveide grupā Vaicājumi noklikšķiniet uz Vaicājuma noformējums.

  2. Aizveriet dialoglodziņu Tabulas rādīšana.

  3. Cilnes Noformējums grupā Vaicājums noklikšķiniet uz Apvienošanas vaicājums. Programma Access paslēpj vaicājuma noformējuma logu un parāda SQL skata objekta cilni. Šobrīd SQL skata objektu cilne ir tukša.

  4. Noklikšķiniet uz pirmā atlases vaicājuma cilnes, kuru vēlaties iekļaut apvienošanas vaicājumā.

  5. Cilnē Sākums noklikšķiniet uz Skats > SQL skats.

  6. Kopējiet atlases vaicājuma SQL priekšrakstu. Noklikšķiniet uz iepriekš veidot sāktā apvienošanas vaicājuma cilnes.

  7. Ielīmējiet atlases vaicājuma SQL priekšrakstu apvienošanas vaicājuma SQL skata objekta cilnē.

  8. Izdzēsiet atlases vaicājuma SQL priekšraksta beigās iekļauto semikolu (;).

  9. Nospiediet taustiņu Enter, lai kursoru pārvietotu vienu rindiņu zemāk, un pēc tam jaunajā rindiņā ierakstiet vārdu UNION.

  10. Noklikšķiniet uz nākamā iekļaušanai apvienošanas vaicājumā paredzētā atlases vaicājuma cilnes.

  11. Atkārtojiet šīs procedūras 5.–10. darbību, līdz apvienošanas vaicājuma SQL skata logā ir nokopēti un ielīmēti visi atlases vaicājumu SQL priekšraksti. Neizdzēsiet pēdējā atlases vaicājuma SQL priekšraksta beigās esošo semikolu vai neierakstiet šajā vietā nekādas rakstzīmes.

  12. Cilnes Noformējums grupā Rezultāti noklikšķiniet uz Izpildīt.

Apvienošanas vaicājuma rezultāti tiek parādīti datu lapas skatā.

Apvienošanas vaicājuma veidošanas piemēra skatīšanās

Lūk, piemērs, kuru varat atveidot Northwind datu bāzes paraugā. Šis apvienošanas vaicājums apkopo personu vārdus no tabulas Klienti un kombinē tos ar personu vārdiem no tabulas Piegādātāji. Ja vēlaties sekot līdzi, veiciet šīs darbības savā Northwind datu bāzes parauga kopijā.

Jūsu pārlūkprogramma neatbalsta video. Instalējiet Microsoft Silverlight, Adobe Flash Player vai Internet Explorer 9.

Lūk, darbības, kas nepieciešamas, lai izveidotu šo piemēru:

  1. Izveidojiet divus atlases vaicājumus ar nosaukumu Vaicājums1 un Vaicājums2, kuru datu avots atbilstoši ir tabula Klienti un Piegādātāji. Kā parādāmās vērtības izmantojiet lauku Vārds un Uzvārds.

  2. Izveidojiet jaunu vaicājumu ar nosaukumu Vaicājums3, kuram sākotnēji nav datu avota, un pēc tam cilnē Noformējums noklikšķiniet uz komandas Apvienošana, lai šo vaicājumu padarītu par apvienošanas vaicājumu.

  3. Vaicājumā Vaicājums3 kopējiet un ielīmējiet SQL priekšrakstus no Vaicājums1 un Vaicājums2. Noteikti noņemiet papildu semikolu un pievienojiet atslēgvārdu UNION. Pēc tam datu lapas skatā varat pārbaudīt rezultātus.

  4. Vienā no vaicājumiem pievienojiet kārtošanas klauzulu un pēc tam apvienošanas vaicājuma SQL skatā ielīmējiet priekšrakstu ORDER BY. Ievērojiet, ka apvienošanas vaicājumā Vaicājums3 pirms pašas kārtošanas vispirms tiek noņemti semikoli, pēc tam no lauku nosaukumiem tiek izņemts tabulas nosaukums.

  5. Beidzamais SQL kods, kas šajā apvienošanas vaicājuma piemērā kombinē un kārto vārdus, ir šāds:

    SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
    FROM Customers
    
    UNION
    
    SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
    FROM Suppliers
    
    ORDER BY [Last Name], [First Name];

Ja SQL sintakse jums nesagādā problēmas, savu SQL priekšrakstu apvienošanas vaicājumam varat rakstīt tieši SQL skatā. Tomēr SQL kods no citiem vaicājumu objektiem kopēšanas un ielīmēšanas paņēmiens jums varētu šķist noderīgs. Katrs vaicājums var būt ievērojami sarežģītāks par šeit izmantotajiem vienkāršajiem atlases vaicājumu piemēriem. Varētu būt noderīgi izveidot un uzmanīgi notestēt visus vaicājumus, pirms tie tiek kombinēti apvienošanas vaicājumā. Ja apvienošanas vaicājuma izpilde neizdodas, katru vaicājumu varat pielāgot atsevišķi, līdz tas izdodas, un pēc tam atkārtoti izveidot savu apvienošanas vaicājumu ar izlabotu sintaksi.

Pārskatiet atlikušās šī raksta sadaļas, lai apgūtu citus padomus un ieteikumus, kā lietot apvienošanas vaicājumus.

Iepriekšējās sadaļas piemērā, izmantojot Northwind datu bāzi, tiek kombinēti dati tikai no divām tabulām. Tomēr apvienošanas vaicājums ļauj ērti kombinēt trīs tabulas un vairāk. Piemēram, papildinot iepriekšējo piemēru, vaicājuma rezultātos varat iekļaut arī darbinieku vārdus. Šo uzdevumu varat paveikt, pievienojot trešo vaicājumu un kombinējot iepriekšējo SQL priekšrakstu ar papildu atslēgvārdu UNION, piemēram, šādi:

SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

Kad skatīsit rezultātus datu lapas skatā, visi darbinieki tiks uzskaitīti, norādot parauga uzņēmuma nosaukumu, kas, iespējams, nav īpaši noderīgi. Ja vēlaties, lai būtu šāds lauks, kas norāda, vai persona ir uzņēmuma darbinieks, piegādātājs vai klients, uzņēmuma nosaukuma vietā varat iekļaut fiksētu vērtību. Lūk, kā SQL kods varētu izskatīties:

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

Lūk, kā rezultāti tiek rādīti datu lapas skatā. Programma Access parāda šos piecus piemēra ierakstus:

Nodarbinātība

Uzvārds

Vārds

Uzņēmumā

Krieva

Agrita

Uzņēmumā

Kaņepa

Daniela

Piegādātājs

Lūsis

Nikolajs

Klients

Vīksna

Laimonis

Klients

Podnieks

Ritums

Iepriekš redzamo vaicājumu var samazināt vēl vairāk, jo Access apvienošanas vaicājumā lasa tikai izvades lauku nosaukumus no pirmā vaicājuma. Šeit redzat, ka mēs noņēmām izvadi no otrās un trešās vaicājuma sadaļas:

SELECT "Customer" As Employment, [Last Name], [First Name]
FROM Customers

UNION

SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers

UNION

SELECT "In-house", [Last Name], [First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

Access apvienošanas vaicājumā kārtošana ir atļauta tikai vienu reizi, bet katru vaicājumu var filtrēt atsevišķi. Turpinot iepriekšējās sadaļas apvienošanas vaicājuma pārveidi, lūk, piemērs, kur mēs filtrējam katru vaicājumu, pievienojot klauzulu WHERE.

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers
WHERE [State/Province] = "UT"

UNION

SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers
WHERE [Job Title] = "Sales Manager"

UNION

SELECT "In-house", Employees.[Last Name], Employees.[First Name]
FROM Employees
WHERE City = "Seattle"

ORDER BY [Last Name], [First Name];

Pārslēdzieties uz datu lapas skatu un redzēsit šiem līdzīgus rezultātus:

Nodarbinātība

Uzvārds

Vārds

Piegādātājs

Jaunzema

Aira

Uzņēmumā

Krieva

Agrita

Klients

Roze

Kazimirs

Uzņēmumā

Lapsa

Aisma

Piegādātājs

Ziemele

Irbe

Klients

Turins

Teodors

Piegādātājs

Saulītis

Sarmis

Piegādātājs

Lagzdiņš

Andis

Uzņēmumā

Auniņš

Nils

Piegādātājs

Zvirbule

Alīda

Uzņēmumā

Vītols

Alfons

Ja apvienojamie vaicājumi ir ļoti atšķirīgi, var rasties situācija, kur izvades laukā ir jākombinē dati ar dažādiem datu tipiem. Šādā gadījumā, apvienošanas vaicājums visbiežāk atgriezīs rezultātus ar teksta datu tipu, jo šis datu tips var ietvert tekstu un skaitļus.

Lai saprastu, kā tas darbojas, izmantosim Northwind datu bāzes parauga apvienošanas vaicājumu Darījumi ar precēm. Atveriet šo datu bāzes paraugu un pēc tam datu lapas skatā atveriet vaicājumu Darījumi ar precēm. Pēdējiem desmit ierakstiem ir jābūt līdzīgiem šai izvadei:

Produkta ID

Pasūtījuma datums

Uzņēmuma nosaukums

Darījums

Daudzums

77

22.01.2006.

Piegādātājs B

Iegāde

60

80

22.01.2006.

Piegādātājs D

Iegāde

75

81

22.01.2006.

Piegādātājs A

Iegāde

125

81

22.01.2006.

Piegādātājs A

Iegāde

200

7

20.01.2006.

Uzņēmums D

Pārdošana

10

51

20.01.2006.

Uzņēmums D

Pārdošana

10

80

20.01.2006.

Uzņēmums D

Pārdošana

10

34

15.01.2006.

Uzņēmums AA

Pārdošana

100

80

15.01.2006.

Uzņēmums AA

Pārdošana

30

Pieņemsim, ka vēlaties lauku Daudzums sadalīt divos laukos Iegāde un Pārdošana. Pieņemsim arī to, ka vēlaties, lai laukā bez vērtības būtu fiksēta nulles vērtība. Lūk, kā izskatīsies šī apvienošanas vaicājuma SQL kods:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], 0 As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, 0 As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC; 

Ja pārslēgsities uz datu lapas skatu, redzēsit, ka pēdējie desmit ieraksti tagad ir līdzīgi šiem:

Produkta ID

Pasūtījuma datums

Uzņēmuma nosaukums

Darījums

Iegāde

Pārdošana

74

22.01.2006.

Piegādātājs B

Iegāde

20

0

77

22.01.2006.

Piegādātājs B

Iegāde

60

0

80

22.01.2006.

Piegādātājs D

Iegāde

75

0

81

22.01.2006.

Piegādātājs A

Iegāde

125

0

81

22.01.2006.

Piegādātājs A

Iegāde

200

0

7

20.01.2006.

Uzņēmums D

Pārdošana

0

10

51

20.01.2006.

Uzņēmums D

Pārdošana

0

10

80

20.01.2006.

Uzņēmums D

Pārdošana

0

10

34

15.01.2006.

Uzņēmums AA

Pārdošana

0

100

80

15.01.2006.

Uzņēmums AA

Pārdošana

0

30

Turpinot šo piemēru: ko darīt, ja vēlaties, lai lauki ar nullēm būtu tukši? Varat modificēt SQL kodu, lai nulles vietā nerādītu neko, pievienojot atslēgvārdu Null, kā redzams tālāk:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Tomēr, kā, iespējams, jau novērojāt, pārslēdzoties uz datu lapas skatu, tagad ir neparedzēti rezultāti. Kolonnā Iegāde visi lauki ir notīrīti:

Produkta ID

Pasūtījuma datums

Uzņēmuma nosaukums

Darījums

Iegāde

Pārdošana

74

22.01.2006.

Piegādātājs B

Iegāde

 

 

77

22.01.2006.

Piegādātājs B

Iegāde

 

 

80

22.01.2006.

Piegādātājs D

Iegāde

 

 

81

22.01.2006.

Piegādātājs A

Iegāde

 

 

81

22.01.2006.

Piegādātājs A

Iegāde

 

 

7

20.01.2006.

Uzņēmums D

Pārdošana

 

10

51

20.01.2006.

Uzņēmums D

Pārdošana

 

10

80

20.01.2006.

Uzņēmums D

Pārdošana

 

10

34

15.01.2006.

Uzņēmums AA

Pārdošana

 

100

80

15.01.2006.

Uzņēmums AA

Pārdošana

 

30

Tas notiek tāpēc, ka Access lauku datu tipus nosaka, izmantojot pirmo vaicājumu. Šajā piemērā Null nav skaitlis.

Kas notiek, ja kā lauku tukšo vērtību mēģināt ievietot tukšu virkni? Atbilstošais SQL kods varētu izskatīties šādi:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], "" As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, "" As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Pārslēdzoties uz datu lapas skatu, redzēsit, ka Access izgūst vērtības Iegāde, bet pārvērš tās par tekstu. To, ka šīs ir teksta vērtības, varat noteikt pēc tā, ka datu lapas skatā tās ir līdzinātas pa kreisi. Tukšā virkne pirmajā vaicājumā nav skaitlis, tāpēc redzat šādus rezultātus. Ievērosit arī to, ka arī vērtības Pārdošana ir pārveidotas par tekstu, jo iegādes ierakstos ir tukša virkne.

Produkta ID

Pasūtījuma datums

Uzņēmuma nosaukums

Darījums

Iegāde

Pārdošana

74

22.01.2006.

Piegādātājs B

Iegāde

20

 

77

22.01.2006.

Piegādātājs B

Iegāde

60

 

80

22.01.2006.

Piegādātājs D

Iegāde

75

 

81

22.01.2006.

Piegādātājs A

Iegāde

125

 

81

22.01.2006.

Piegādātājs A

Iegāde

200

 

7

20.01.2006.

Uzņēmums D

Pārdošana

 

10

51

20.01.2006.

Uzņēmums D

Pārdošana

 

10

80

20.01.2006.

Uzņēmums D

Pārdošana

 

10

34

15.01.2006.

Uzņēmums AA

Pārdošana

 

100

80

15.01.2006.

Uzņēmums AA

Pārdošana

 

30

Kā atrisināt šo problēmu?

Risinājums ir piespiest vaicājumu sagaidīt, ka lauka vērtība būs skaitlis. To var paveikt ar šādu izteiksmi:

IIf(False, 0, Null)

Pārbaudāmais nosacījums Aplams nekad nebūs Patiess, tāpēc izteiksme vienmēr atgriezīs Null, bet Access joprojām novērtēs abas izvades opcijas un izlems, vai izvade ir skaitlis vai vērtība Null.

Lūk, kā varam izmantot šo izteiksmi savā piemērā, kas darbojas:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], IIf(False, 0, Null) As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Ņemiet vērā, ka nav nepieciešams modificēt otro vaicājumu.

Ja pārslēgsities uz datu lapas skatu, tagad redzēsit nepieciešamo rezultātu:

Produkta ID

Pasūtījuma datums

Uzņēmuma nosaukums

Darījums

Iegāde

Pārdošana

74

22.01.2006.

Piegādātājs B

Iegāde

20

 

77

22.01.2006.

Piegādātājs B

Iegāde

60

 

80

22.01.2006.

Piegādātājs D

Iegāde

75

 

81

22.01.2006.

Piegādātājs A

Iegāde

125

 

81

22.01.2006.

Piegādātājs A

Iegāde

200

 

7

20.01.2006.

Uzņēmums D

Pārdošana

 

10

51

20.01.2006.

Uzņēmums D

Pārdošana

 

10

80

20.01.2006.

Uzņēmums D

Pārdošana

 

10

34

15.01.2006.

Uzņēmums AA

Pārdošana

 

100

80

15.01.2006.

Uzņēmums AA

Pārdošana

 

30

Alternatīvs veids, kā panākt to pašu rezultātu, ir apvienošanas vaicājuma vaicājumu sākumā pievienot citu vaicājumu:

SELECT 
    0 As [Product ID], Date() As [Order Date], 
    "" As [Company Name], "" As [Transaction], 
    0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False

Katram laukam Access atgriež fiksētas jūsu definētā datu tipa vērtības. Protams, jūs nevēlaties, lai šī vaicājuma izvade iejauktos rezultātos, tāpēc, lai no tā izvairītos, pie Aplams ir jāiekļauj klauzula WHERE:

WHERE False

Tas ir neliels triks, jo tas vienmēr ir Aplams, un tad vaicājums neko neatgriež. Kombinējot šo priekšrakstu ar esošo SQL kodu, mēs iegūstam šādu pabeigtu priekšrakstu:

SELECT 
    0 As [Product ID], Date() As [Order Date], 
    "" As [Company Name], "" As [Transaction], 
    0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False

UNION

SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Piezīme.: Kombinētais vaicājums šajā piemērā, izmantojot Northwind datu bāzi, atgriež 100 ierakstu, bet abi atsevišķie vaicājumi atgriež 58 un 43 ierakstus, kuru kopsumma ir 101 ieraksts. Šādas neatbilstības iemesls ir tas, ka divi ieraksti nav unikāli. Skatiet sadaļu Darbs ar atšķirīgiem ierakstiem apvienošanas vaicājumos, izmantojot UNION ALL, lai uzzinātu, kā novērst šo scenāriju, izmantojot UNION ALL.

Īpašs gadījums darbā ar apvienošanas vaicājumu ir ierakstu kopas kombinēšana ar vienu ierakstu, kurā ir viena vai vairāku lauku summa.

Lūk, cits piemērs, kuru varat izveidot Northwind datu bāzes paraugā, lai parādītu, kā apvienošanas vaicājumā iegūt kopsummu.

  1. Izveidojiet jaunu vienkāršu vaicājumu, lai skatītu alus iegādi (Northwind datu bāzē Produkta ID=34), izmantojot šādu SQL sintaksi:

    SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    ORDER BY [Purchase Order Details].[Date Received];
  2. Pārslēdzieties uz datu lapas skatu, un jābūt redzamiem četriem pirkumiem:

    Saņemšanas datums

    Daudzums

    22.01.2006.

    100

    22.01.2006.

    60

    04.04.2006.

    50

    05.04.2006.

    300

  3. Lai iegūtu kopsummu, izveidojiet vienkāršu apkopošanas vaicājumu, izmantojot šādu SQL kodu:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
  4. Pārslēdzieties uz datu lapas skatu, un jābūt redzamam tikai vienam ierakstam:

    Maksimālais saņemšanas datums

    Daudzumu summa

    05.04.2006.

    510

  5. Kombinējiet šos divus vaicājumus apvienošanas vaicājumā, lai pievienotu ierakstu ar iegādes ierakstu kopsummu:

    SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    UNION
    
    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    ORDER BY [Purchase Order Details].[Date Received];
  6. Pārslēdzieties uz datu lapas skatu, un jābūt redzamiem četriem pirkumiem ar katram atbilstošo summu, kam seko ieraksts ar daudzuma kopsummu:

    Saņemšanas datums

    Daudzums

    22.01.2006.

    60

    22.01.2006.

    100

    04.04.2006.

    50

    05.04.2006.

    300

    05.04.2006.

    510

Šī bija pamatinformācija par kopsummu pievienošanu apvienošanas vaicājumam. Iespējams, vēlēsities abos vaicājumos iekļaut arī fiksētas vērtības, piemēram, “Detalizēti” un “Kopsumma”, lai kopsummas ierakstu vizuāli nodalītu no citiem ierakstiem. Fiksētu vērtību izmantošanu varat pārskatīt sadaļā Trīs un vairāk tabulu vai vaicājumu kombinēšana apvienošanas vaicājumā.

Programmā Access apvienošanas vaicājumi pēc noklusējuma ietver tikai atšķirīgus ierakstus. Kā rīkoties, ja vēlaties iekļaut visus ierakstus? Šeit varētu noderēt vēl viens piemērs.

Iepriekšējā sadaļā parādījām, kā apvienošanas vaicājumā izveidot kopsummu. Modificējiet šo apvienošanas vaicājuma SQL kodu, lai iekļautu Produkta ID=48:

SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

UNION

SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

ORDER BY [Purchase Order Details].[Date Received];

Pārslēdzieties uz datu lapas skatu, un jābūt redzamam tādam kā maldinošam rezultātam:

Saņemšanas datums

Daudzums

22.01.2006.

100

22.01.2006.

200

Viens ieraksts, protams, neatgriež divreiz lielāku kopsummas daudzumu.

Šāda rezultāta iemesls ir tas, ka vienā dienā tas pats šokolādes daudzums tika pārdots divreiz, kā tas ir reģistrēts tabulā Detalizēta informācija par pirkšanas pasūtījumu. Lūk, vienkārša atlases vaicājuma rezultāts, kurā ir redzami abi ieraksti Northwind datu bāzes paraugā.

Pirkšanas pasūtījuma ID

Produkts

Daudzums

100

Northwind Traders šokolāde

100

92

Northwind Traders šokolāde

100

Iepriekš minētajā apvienošanas vaicājumā varat redzēt, ka lauks Pirkšanas pasūtījuma ID nav iekļauts, tāpēc šie divi lauki neveido divus atšķirīgus ierakstus.

Ja vēlaties iekļaut visus ierakstus, savā SQL kodā UNION vietā izmantojiet UNION ALL. Tas visdrīzāk ietekmēs rezultātu kārtošanu, tāpēc, iespējams, vēlēsities iekļaut arī klauzulu ORDER BY, lai noteiktu kārtošanas secību. Lūk, modificēts SQL kods, kura pamatā ir iepriekšējais piemērs:

SELECT [Purchase Order Details].[Date Received], Null As [Total], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

UNION ALL

SELECT Max([Date Received]), "Total" As [Total], Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

ORDER BY [Total];

Pārslēdzieties uz datu lapas skatu, un kopā ar kopsummu pēdējā ierakstā ir jābūt redzamai arī visai detalizētajai informācijai:

Saņemšanas datums

Kopā

Daudzums

22.01.2006.

 

100

22.01.2006.

 

100

22.01.2006.

Kopā

200

Apvienošanas vaicājums bieži vien tiek izmantots, lai kalpotu kā ierakstu avots formā iekļautai kombinētā lodziņa vadīklai. Šo kombinēto lodziņu varat izmantot, lai atlasītu vērtību formas ierakstu filtrēšanai. Piemēram, lai filtrētu darbinieku ierakstus pēc pilsētas.

Lai noskaidrotu, kā tas varētu darboties, lūk, cits piemērs, kuru varat izveidot Northwind datu bāzes paraugā, lai ilustrētu šo scenāriju.

  1. Izveidojiet vienkāršu atlases vaicājumu, izmantojot šo SQL sintaksi:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. Pārslēdzieties uz datu lapas skatu, un jābūt redzamiem šādiem rezultātiem:

    Pilsēta

    Filtrs

    Jūrmala

    Jūrmala

    Sloka

    Sloka

    Sigulda

    Sigulda

    Olaine

    Olaine

    Jūrmala

    Jūrmala

    Sigulda

    Sigulda

    Jūrmala

    Jūrmala

    Sigulda

    Sigulda

    Jūrmala

    Jūrmala

  3. Skatot šos rezultātus, iespējams, nesaskatīsit neko vērtīgu. Tomēr izvērsiet vaicājumu un pārvērtiet to par apvienošanas vaicājumu, izmantojot šādu SQL kodu:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
  4. Pārslēdzieties uz datu lapas skatu, un jābūt redzamiem šādiem rezultātiem:

    Pilsēta

    Filtrs

    <Visas>

    *

    Sloka

    Sloka

    Olaine

    Olaine

    Sigulda

    Sigulda

    Jūrmala

    Jūrmala

    Programma Access veic šo deviņu ierakstu apvienošanu, kas iepriekš parādīti, ar fiksētām lauku vērtībām <Visas> un “*”.

    Tā kā šajā apvienošanas klauzulā nav UNION ALL, Access atgriež tikai atšķirīgos ierakstus, kas nozīmē to, ka katra pilsēta ar fiksētajām identiskajām vērtībām tiek atgriezta tikai vienu reizi.

  5. Tagad, kad jums ir pabeigts apvienošanas vaicājums, kas katru pilsētas nosaukumu rāda tikai vienu reizi, kopā ar opciju, kas efektīvi atlasa visas pilsētas, šo vaicājumu varat izmantot kā ierakstu avotu formas kombinētajam lodziņam. Izmantojot šo konkrēto piemēru kā modeli, formā varat izveidot kombinēto lodziņu, iestatīt šo vaicājumu kā tā ierakstu avotu, kolonnas Filtrs rekvizītam Kolonnas platums iestatīt vērtību 0 (nulle), lai vizuāli to paslēptu, un pēc tam iestatīt rekvizīta Saistītā kolonna vērtību 1, lai norādītu otrās kolonnas indeksu. Pēc tam pašas formas rekvizītā Filtrs varat pievienot kodu, piemēram, tālāk norādīto, lai aktivizētu formas filtru, izmantojot vērtību, kas ir atlasīta kombinētā lodziņa vadīklā:

    Me.Filter = "[City] Like '" & Me![FilterComboBoxName].Value & "'"
    Me.FilterOn = True

    Tad veidlapas lietotājs var filtrēt formas ierakstus pēc konkrēta pilsētas nosaukuma vai atlasīt <Visas>, lai uzskaitītu visus ierakstus ar visām pilsētām.

Uz lapas sākumu

Paplašiniet savas Office prasmes
Iepazīties ar apmācību
Esiet pirmais, kas saņem jaunās iespējas
Pievienoties Office Insider programmai

Vai šī informācija bija noderīga?

Paldies par jūsu atsauksmēm!

Paldies par atsauksmēm! Šķiet, ka varētu būt noderīgi sazināties ar kādu no mūsu Office atbalsta aģentiem.

×