Avatar billede shaagerup Nybegynder
25. september 2005 - 14:44 Der er 7 kommentarer og
1 løsning

Tabeljoin, sortering, kommaseparerede udtag m.m.

Jeg har tabellen "indhold" som er opbygget på flg. måde:

indholdid | tal1 | tal2 | tal3 | status
---------------------------------------
1        | 23  | 3    | 4500 | Vises
2        | 23  | 3    | 4600 | Vises
3        | 23  | 4    | 4500 | Vises
4        | 21  | 2    | 2500 | Vises ikke
5        | 21  | 2    | 2500 | Vises
6        | 21  | 2    | 2500 | Vises
7        | 45  | 5    | 2700 | Vises
8        | 21  | 2    | 2500 | Vises
9        | 23  | 3    | 2600 | Vises
10        | 45  | 5    | 2700 | Vises

Vi har så tabellen "gruppering" opbygget således:

id | indholdid | gruppeid
-------------------------
1  | 1        | 1
2  | 3        | 1
3  | 2        | 1
4  | 5        | 2
5  | 4        | 2
6  | 7        | 2
7  | 6        | 2
8  | 9        | 3
9  | 10        | 3
10 | 8        | 4

---

Jeg skal nu have et udtag, der lister alle forskellige kombinationer af tal1, tal2 og tal3 indenfor hver

gruppe. Dette skal være sorteret efter samme princip som i http://www.eksperten.dk/spm/650459 - altså først

efter tal1, så tal2 og sidst tal3.

Et eksempel-udtag med ovenstående data ser sådan ud:

UDTAG 1:

gruppeid | tal1 | tal2 | tal3 | antal
-------------------------------------
2        | 21  | 2    | 2500 | 2
2        | 21  | 2    | 2700 | 1
2        | 45  | 5    | 2700 | 1
4        | 21  | 2    | 2500 | 1
3        | 23  | 3    | 2600 | 1
3        | 45  | 5    | 2700 | 1
1        | 23  | 3    | 4500 | 1
1        | 23  | 3    | 4600 | 1
1        | 23  | 4    | 4500 | 1

Tages der forhold for status (som der skal være mulighed for), bliver det sådan her):

UDTAG 2:

gruppeid | tal1 | tal2 | tal3 | antal
-------------------------------------
2        | 21  | 2    | 2500 | 1 <-- Der er nu kun 1
2        | 21  | 2    | 2700 | 1
2        | 45  | 5    | 2700 | 1
4        | 21  | 2    | 2500 | 1
3        | 23  | 3    | 2600 | 1
3        | 45  | 5    | 2700 | 1
1        | 23  | 3    | 4500 | 1
1        | 23  | 3    | 4600 | 1
1        | 23  | 4    | 4500 | 1


Jeg vil nu have stort set det samme fortalt, blot kun med 1 linje for hvert gruppeid:

UDTAG 3: (igen med forhold for status)

gruppeid | tal1_min | tal1_max | tal1_kom | tal2_min | tal2_max | tal2_kom | tal3_min | tal3_max | tal3_kom | antal
-------------------------------------------------------------------------------------------------------------------
2        | 21      | 45      | 21,45    | 2        | 5        | 2,5      | 2500    | 2700    | 2500,2700| 3
4        | 21      | 21      | 21      | 2        | 2        | 2        | 2500    | 2500    | 2500    | 1
3        | 23      | 45      | 23,45    | 3        | 5        | 3,5      | 2600    | 2700    | 2600,2700| 2
1        | 23      | 23      | 23      | 3        | 4        | 3,4      | 4500    | 4600    | 4500,4600| 3

Sidst, vil jeg gerne selv kunne bestemme hvilke ting der kan stå på samme linje. Vil jeg kun have tal3 sammen, kommer det altså til at se således ud:

UDTAG 4: (igen med forhold for status)

gruppeid | tal1 | tal2 | tal3_min | tal3_max | tal3_kom | antal
---------------------------------------------------------------
2        | 21  | 2    | 2500    | 2700    | 2500,2700| 2
2        | 45  | 5    | 2700    | 2700    | 2700    | 1
4        | 21  | 2    | 2500    | 2500    | 2500    | 1
3        | 23  | 3    | 2600    | 2600    | 2600    | 1
3        | 45  | 5    | 2700    | 2700    | 2700    | 1
1        | 23  | 3    | 4500    | 4600    | 4500,4600| 2
1        | 23  | 4    | 4500    | 4500    | 4500    | 1


Lav UDTAG 1, UDTAG 2, UDTAG 3 og UDTAG 4 eller nogen af dem, og få points derefter :-). Spørgsmål er velkomne. Et krav er, at de skal kunne forespørges fra ASP, men kom med forslag under alle omstændigheder.
Avatar billede terry Ekspert
25. september 2005 - 16:17 #1
can you explain how youi can say that the following table is soretd after tal. tal2 tal3?

UDTAG 1:

gruppeid | tal1 | tal2 | tal3 | antal
-------------------------------------
2        | 21  | 2    | 2500 | 2
2        | 21  | 2    | 2700 | 1
2        | 45  | 5    | 2700 | 1
4        | 21  | 2    | 2500 | 1
3        | 23  | 3    | 2600 | 1
3        | 45  | 5    | 2700 | 1
1        | 23  | 3    | 4500 | 1
1        | 23  | 3    | 4600 | 1
1        | 23  | 4    | 4500 | 1
Avatar billede terry Ekspert
25. september 2005 - 16:21 #2
I always thought that 45 was higher than 21 and 23!
Avatar billede terry Ekspert
25. september 2005 - 16:31 #3
If I have understood the question(s) correctly. And I'll wait and see if I have before going on!

UDTAG 1
SELECT gruppering.gruppeid, indhold.tal1, indhold.tal2, indhold.tal3, Count(gruppering.gruppeid) AS CountOfgruppeid
FROM indhold INNER JOIN gruppering ON indhold.indholdid = gruppering.indholdid
GROUP BY gruppering.gruppeid, indhold.tal1, indhold.tal2, indhold.tal3
ORDER BY indhold.tal1, indhold.tal2, indhold.tal3;

UDTAG 2
SELECT gruppering.gruppeid, indhold.tal1, indhold.tal2, indhold.tal3, indhold.status, Count(gruppering.gruppeid) AS CountOfgruppeid
FROM indhold INNER JOIN gruppering ON indhold.indholdid = gruppering.indholdid
GROUP BY gruppering.gruppeid, indhold.tal1, indhold.tal2, indhold.tal3, indhold.status
HAVING (((indhold.status)="vises"))
ORDER BY indhold.tal1, indhold.tal2, indhold.tal3;
Avatar billede kjulius Novice
25. september 2005 - 16:45 #4
Udtag 1 og 2 burde være meget let (hvis jeg ellers ikke har misforstået noget):

Udtag 1:

SELECT g.gruppeid, i.tal1, i.tal2, i.tal3, Count(*) AS Antal
FROM gruppering AS g, indhold AS i
WHERE (((i.Id)=[g].[indholdid]))
GROUP BY g.gruppeid, i.tal1, i.tal2, i.tal3
ORDER BY i.tal1, i.tal2, i.tal3, g.gruppeid;

Udtag 2:

SELECT g.gruppeid, i.tal1, i.tal2, i.tal3, count(*) AS Antal
FROM gruppering AS g, indhold AS i
WHERE i.id=g.indholdid And i.status='Vises'
GROUP BY i.tal1, i.tal2, i.tal3, g.gruppeid
ORDER BY i.tal1, i.tal2, i.tal3, g.gruppeid;

De næste skal jeg vist lige tænke lidt over :-)

BTW Ovenstående giver ikke helt samme antal som du angiver, men jeg håber det er dig, der har lavet en fejl...
Avatar billede kjulius Novice
25. september 2005 - 16:59 #5
Nå, nej, jeg har været for optimistisk. Du vil jo have grupperne sorteret i ordenen som i spørgsmålet du henviser til. Uha, det gør det jo straks meget sværere!
Avatar billede shaagerup Nybegynder
25. september 2005 - 18:55 #6
terry/kjulius: I made QUERY 1 like this:

1) Find out in which order the different "gruppeid"s comes, if I order by the first combination of: tal1,tal2,tal3,gruppeid. "2" is before "4" because 2<4. "4" is before "3" because all the numbers in "3" are bigger than "4". "3" is before "1" because 2600<4500.

2) Now I list all of the combinations, with the order from 1).

In QUERY2 I only take status="Vises" into account.

---

In QUERY3 and QUERY4 I want it to list the combinations differently, with the use of min(), max() and comma-seperation.
Avatar billede shaagerup Nybegynder
25. september 2005 - 19:39 #7
Måske kan dette bruges som basis til en færdig UDTAG 1:

SELECT DISTINCT gruppering.gruppeid,indhold.tal1,indhold.tal2,indhold.tal3 FROM (SELECT * FROM indhold INNER JOIN gruppering ON indhold.indholdid=gruppering.indholdid)

Her har den dog ikke
- den rigtige rækkefølge
- optælling af antal indhold
Avatar billede shaagerup Nybegynder
30. januar 2006 - 16:43 #8
Lukker nu, da der ikke kom nogen endelige svar.
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