Avatar billede stof Nybegynder
11. november 2011 - 11:24 Der er 6 kommentarer og
1 løsning

Union / samle querry

Jeg har 2 querries:

Q_A:
Dato
AntalNew

Q_B:
Dato
AntelOpen

Jeg vil gerne kombinere disse 2 til en querry med 3 felter:
Dato, AntalNew, AntalOpen

Så det er dato-feltet det skal samles på. Tilfældet er bare at det ikke er altid der er en dato på Q_A såvel som på Q_B. Jeg kan dermed ikke gøre brug af inner join, såvel som left og right join.

Kan du evt. hjælpe mig med det her problem? På forhånd tak.
11. november 2011 - 11:40 #1
Fortæl lidt mere.  Hvor finder du Dato, AntalNew og AntalOpen?  I en enkel mssql tabel eller i to forskellige tabeller?  Hvilke felter er der i disse to tabeller?

Men et tip kunne være at prøve med FULL OUTER JOIN
Avatar billede stof Nybegynder
11. november 2011 - 11:55 #2
Tingene i Q_A henter jeg i en tabel (1). Og tingene i Q_B henter jeg i en anden tabel (2).
Det er summering og gruppereringer af megen data.

Det vil selvfølgelig være at foretrække at det samles i en querry. 3 querries er måske lige voldsomt nok for at løse sådan et problem.

Den vil ikke acceptere FULL OUTER JOIN i Access. Det er ellers helt sikkert sådan noget jeg skal bruge.
11. november 2011 - 12:39 #3
1.  Du sagde ikke noget om at det var i Access.
2.  Jeg står og skal afsted.  Jeg kikker i aftenen.
Avatar billede stof Nybegynder
11. november 2011 - 12:52 #4
1. Sorry. Jeg troede MS SQL svarede til Microsoft Sql og regnede med det var det samme der kørte i Access.
2. Helt i orden. Tak for hjælpen.
11. november 2011 - 15:26 #5
Så er jeg med igen.  Nej, den sql version der bruges i Access har et antal begrænsninger i forhold til gængse sql versioner.  For at lave en full outer join i access skal man lave en left outer join og en right outer join og unione dem, og fordi de to tabeller (som jeg forstår det) ikke har samme felter (en tabel har antalNew og den anden antalOpen) skal man starte med en inner join for at få de nødvendige felter i den resulterende tabel.  Da det er længe siden jeg har været igang med Access googlede jeg lidt og fandt blandt andet denne forklaring:

http://www.databasejournal.com/features/msaccess/article.php/3516561/Implementing-the-Equivalent-of-a-FULL-OUTER-JOIN-in-Microsoft-Access.htm

Jeg lavede (i mysql) to tabeller og fyldte nogle værdier i dem som vist nedenfor.  Så kørte jeg denne query og fik det resultat jeg forventede.

SELECT dato, antalNew, antalOpen FROM stof1 a LEFT JOIN stof2 b ON a.dato = b.dato ORDER BY dato;

SELECT a.dato, antalNew, antalOpen FROM stof1 a INNER JOIN stof2 b ON a.dato = b.dato
UNION
SELECT a.dato, antalNew, antalOpen FROM stof1 a LEFT OUTER JOIN stof2 b ON a.dato=b.dato
UNION
SELECT b.dato, antalNew, antalOpen FROM stof1 a RIGHT OUTER JOIN stof2 b ON a.dato=b.dato
ORDER BY dato

Her er resultatet:

dato  antalNew  antalOpen 
2011-10-01 5 NULL
2011-10-02 NULL 12
2011-10-03 7 21
2011-10-04 NULL 33
2011-10-05 NULL 8
2011-10-06 NULL 2
2011-10-07 1 5
2011-10-11 3 NULL
2011-10-12 14 NULL
2011-10-14 11 NULL

Og her er tabellerne med data:

CREATE TABLE stof1(dato DATE, antalNew INT);
INSERT INTO stof1 VALUES('2011-10-01', 5);
INSERT INTO stof1 VALUES('2011-10-03', 7);
INSERT INTO stof1 VALUES('2011-10-07', 1);
INSERT INTO stof1 VALUES('2011-10-11', 3);
INSERT INTO stof1 VALUES('2011-10-12', 14);
INSERT INTO stof1 VALUES('2011-10-14', 11);

CREATE TABLE stof2(dato DATE, antalOpen INT);
INSERT INTO stof2 VALUES('2011-10-02', 12);
INSERT INTO stof2 VALUES('2011-10-03', 21);
INSERT INTO stof2 VALUES('2011-10-04', 33);
INSERT INTO stof2 VALUES('2011-10-05', 8);
INSERT INTO stof2 VALUES('2011-10-06', 2);
INSERT INTO stof2 VALUES('2011-10-07', 5);


MEN:  Det lyder overraskende, at du har to tabeller med tilsyneladende temmelig ens indhold.  Er du sikker på du har den rigtige tabel struktur?  Ellers kunne du jo (i et frisk spørgsmål) forelægge problemstillingen og bede om kommentar til din tabelstruktur.
Avatar billede stof Nybegynder
13. november 2011 - 19:48 #6
Hej igen Christian.

Tusind tusind tak for hjælpen. Nu kommer det forventede output. Jeg vil overveje på længere sigt at samle det i samme tabel. Tak for hjælpen endnu engang. Vil du lave et svar?
13. november 2011 - 20:03 #7
Svar fra mig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester