25. november 2004 - 08:55Der er
12 kommentarer og 1 løsning
hente feltnavne fra tabel og regne på dem
Jeg har brug for at lave en forespørgsel, der henter alle værdierne (områder) fra en tabel med områder (tOmråder).
For hvert område skal der beregnes noget i stil med: Val(Str(Nz([EgenskabA]![Område1]*[EgenskabB]![Område1];0)))
Da områderne skal kunne ændres, er det vigtigt for mig at kunne hente dem fra tabellen, så det er nemt at indsætte nye områder. Men kan jeg det og hvordan?
Tabellen med områder: tOmråder indeholder nogle felter: omr1 omr2 omr3 osv. og ikke andet
Så er der en række personer med to forskellige egenskaber. De bor i de forskellige områder. For hver person med egenskab A er der en række i tabel tEgenskabA, fx: Id Område Alder 1 Omr2 24 2 Omr1 1 3 Omr3 82 4 Omr1 1 osv
Og ligeledes for egenskab B.
Jeg vil nu gerne lave en forespørgsel, der giver mig alle de områder der er i tOmråder som kolonneoverskrifter. For hver alder og hvert område vil jeg så gerne vise antallet af personer med den pågældende alder i det pågældende område med egenskab A gange med personer i samme alder og i samme område med egenskab B. Dvs:
Alder Omr1 Omr2 ... 1 2 * y 0 * y 2 (antal i omr1 med egenskabA (antal i omr2 med egenskabA * antal i omr1 med egenskabB) * antal i omr2 med egenskabB)
Firstly, I think you need to look at your database design! In tOmråder you only need one field (Område) and for each ormråde you have a record with the name.
Now table tEgenskabA field Område has a relationship with tOmråder.Område and the same for tEgenskabB.
Now this is just an idea, so you need to try it yourself.
Make a query on tEgenskabA where you group on Område and alder and a caculated field showing count. Then you need to make a sub select where you slect count from tEgenskabB where Område and Alder are the same. Something like
SELECT tEgenskabA.Område, tEgenskabA.Alder, Count(tEgenskabA.Alder) AS Antal, [Antal]*(Select Count(*) from tEgenskabB Where tEgenskabB.Område = tEgenskabA.Område AND tEgenskabB.Alder = tEgenskabA.Alder) AS Tot FROM tEgenskabA GROUP BY tEgenskabA.Område, tEgenskabA.Alder
Du har ret i at områderne i tOmråder ikke er felter, men værdier. Der er kun ét felt "Områder". grunden til at jeg har brug for tOmråder er, at jeg har brug for at få vist alle områder som er heri, også selvom der ikke er observationer for et enkelt område. (Det er fordi jeg efterfølgende skal regne videre på det i excel, og her skal tabellerne være helt ens hver gamg).
Jeg er ikke så hurtig til Access, men jeg kigger lige på dit forslag
you could make another query where you use th efirst query and also tOmråder with an INNER JOIN (default) between område. Then only records where there are records in both will be displayed.
Jeg takker for hjælpen, og smider lige dit svar ud, så andre kan få glæde af det også.
"Hi I have made a query which selects the information I think you want in your result. (qryOmr) Now we should be able to use a pivot query (wizard) to get the område as column headings, but I dont seem to be able to get this to work. I think its because the query (qryOmr) is too complex!
So another solution is to put the data you get from the query (qryOmr) into a new table which you can then use in the pivot query.
This is the SQL for qryOmr
SELECT tOmr.Omr, tEgenskabA.Alder, Count([tEgenskabA].[Alder])*(Select Count(*) from tEgenskabB Where tEgenskabB.Omr = tEgenskabA.Omr AND tEgenskabB.Alder = tEgenskabA.Alder) AS Tot FROM tEgenskabA RIGHT JOIN tOmr ON tEgenskabA.Omr = tOmr.Omr GROUP BY tOmr.Omr, tEgenskabA.Omr, tEgenskabA.Alder;
This is the SQL for the query to make your table (tblPivot)
SELECT qryOmr.* INTO tblPivot FROM qryOmr;
And this is the SQL for the Pivot query
TRANSFORM First(tblPivot.Tot) AS FirstOfTot SELECT tblPivot.Alder FROM tblPivot GROUP BY tblPivot.Alder PIVOT tblPivot.Omr;
This isnt a very elegant solution but it seems to work, and I hope you can use it!"
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.