Avatar billede dsp82 Nybegynder
14. oktober 2008 - 18:23 Der er 13 kommentarer og
1 løsning

Konsolidere to tabeller sammen?

Hey, har to tabeller som jeg gerne vil flette sammen, men støder ind i nogle problemer.

Vil gerne følge op på mit budget mod faktisk forbrug og har følgende.

Tabel1: vare, måned, budget
Tabel2: vare, måned, forbrug

Problemet er, at når jeg laver en inner/right/left join, så filtreres der resultater fra, hvilket der ikke skal gøres.

Vil have en tabel med følgende, hvor alt budgetteret og alt faktisk forbrug er med. Hvis vare og måned er ens på begge lister, skal de selvfølgelig konsilideres.

Den samlede tabel skal se sådan her ud

Tabel3: vare, måned, budget, forbrug

Er det muligt?
Avatar billede terry Ekspert
14. oktober 2008 - 18:30 #1
Is ther only one record for each vare/måned? If not then make two queries each where you group on Vare/måned and sum on budget or forbrug. THen make another query joining vare/måned and then select vare, måned, budget, forbrug
Avatar billede terry Ekspert
14. oktober 2008 - 18:34 #2
"Problemet er, at når jeg laver en inner/right/left join, så filtreres der resultater fra"
Maybe because you dont have data for each vare/måned in both tables ?
Avatar billede dsp82 Nybegynder
14. oktober 2008 - 18:55 #3
I have several "vare" for each "month" and sometimes they arent in both tables.

example:

Table1:
vare, måned, budget:
æble, januar, 10
æble, februar, 20
banan, april, 15

Table2:
vare, måned, forbrug:
æble, januar, 20
æble, marts, 30
appelsin, januar, 10

Should end up like this on a new table:
vare, måned, budget, forbrug;
æble, januar, 10, 20
æble, februar, 20,0
æble, marts, 0, 30
banan, april, 15, 0
appelsin, januar, 0, 10

Is it possible?
Avatar billede terry Ekspert
14. oktober 2008 - 19:15 #4
Yes its possible but I dont know what the easies way is. You could try the following approach.

Make a UNION Query to get a total list of all vare/måned

SELECT Vare, måned FROM Table1
UNION
SELECT Vare, måned FROM Table2

Now make a new table

Tabel3: vare, måned, budget, forbrug

Then make an append query where you append the data (vare/måned) you get from your union query into table3

Now make two update queries something like this

UPDATE table3 SET budget = (SELECT budget from table1 T1 WHERE T1.vare = table3.vare and T1.månde = table3.måned)

and something similar for forbrug in table2
Avatar billede dsp82 Nybegynder
14. oktober 2008 - 21:07 #5
I tried something similar with a UNION, but not as far as you made it.

Isn't there a easier way, sounds complicated?
And do i manually have to UPDATE, whenever new data is stored in table1 or table2?
Avatar billede dsp82 Nybegynder
14. oktober 2008 - 21:09 #6
The reason i ask for a easier way is because, the example i made, is only a small part of the whole consolidation, I wish to make.
Avatar billede terry Ekspert
14. oktober 2008 - 22:02 #7
It isnt so complicated but there is quite a bit of manual work to make table3.


And why do you need to have tables 1 and 2 if you  can have it all in one table?

Once its all in table 3 then you dont need the other two tables.

I am sure I could produce one query which would show what you want, but if you could have manage with only one table then I would suggest you do that, it will make things much easier in the long run.
Avatar billede dsp82 Nybegynder
14. oktober 2008 - 22:09 #8
I get the data from two different systems, which is why I cant start with just a table, that has it all.

That is the reason, I have to consolidate them.
Avatar billede terry Ekspert
14. oktober 2008 - 22:30 #9
if you can send me an example of your tables then I wil try and make a query which shows what you want.
ekspertenATsanthell.dk
AT = @
I'll first have time tomorrow evening, hope thats OK.
Avatar billede Slettet bruger
14. oktober 2008 - 22:40 #10
Forespørgsel1:
INSERT INTO Tabel3 ( vare, måned, budget )
SELECT Tabel1.vare, Tabel1.måned, Tabel1.budget
FROM Tabel1;

Forespørgsel2:
UPDATE Tabel3 INNER JOIN Tabel2 ON (Tabel3.vare = Tabel2.vare) AND (Tabel3.måned = Tabel2.måned) SET Tabel3.forbrug = Tabel2.forbrug;

Forespørgsel3:
INSERT INTO Tabel3 ( vare, måned, forbrug )
SELECT Tabel2.vare, Tabel2.måned, Tabel2.forbrug
FROM Tabel2 LEFT JOIN Tabel1 ON (Tabel2.vare = Tabel1.vare) AND (Tabel2.måned = Tabel1.måned)
WHERE (((Tabel1.måned) Is Null) AND ((Tabel1.vare) Is Null));
Avatar billede dsp82 Nybegynder
14. oktober 2008 - 23:45 #11
spg: Meningen med det hele er, at det skal ske automatisk ligeså snart ændringer fremkommer i tabel1 eller tabel2. Det skal helst undgå manuelle funktioner.

terry: That might be a little difficult, since its work related and private. Sorry.

Guess I'm stuck then?
Avatar billede Slettet bruger
15. oktober 2008 - 00:23 #12
SELECT Tabel1.vare, Tabel1.måned, Tabel1.budget, Tabel2.forbrug
FROM Tabel1 INNER JOIN Tabel2 ON (Tabel1.vare = Tabel2.vare) AND (Tabel1.måned = Tabel2.måned)
UNION SELECT Tabel1.vare, Tabel1.måned, Tabel1.budget, 0 AS forbrug
FROM Tabel1 LEFT JOIN Tabel2 ON (Tabel1.måned = Tabel2.måned) AND (Tabel1.vare = Tabel2.vare)
WHERE (((Tabel2.vare) Is Null) AND ((Tabel2.måned) Is Null))
UNION SELECT Tabel2.vare, Tabel2.måned, 0 AS budget, Tabel2.forbrug
FROM Tabel1 RIGHT JOIN Tabel2 ON (Tabel1.vare = Tabel2.vare) AND (Tabel1.måned = Tabel2.måned)
WHERE (((Tabel1.vare) Is Null) AND ((Tabel1.måned) Is Null));
Avatar billede terry Ekspert
15. oktober 2008 - 08:03 #13
You only need send examples of table1 and table2 with the fields I need and some test data, just to save me time having to make it. You dont need to send the full dB or anything not relevant to the question.
Avatar billede dsp82 Nybegynder
15. oktober 2008 - 13:18 #14
I figured it out, but it was as spg answered. Create 3 queries and then UNION them.

Thanx anyway.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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