Avatar billede spritzer Nybegynder
19. august 2004 - 21:41 Der er 16 kommentarer og
1 løsning

Hjælp til SQL sætning - flere tabeller

Jeg har flg. tabeller hvor jeg bruger følgende kolonner

read
- tekst [tal]
- antal [tal]

user
- id [tal/auto]
- opsagt [true/false]

anmeldelser
- id [tal/auto]
- forfatter [tal]

Og så til det sjove.

Jeg skal have lavet en SELECT SUM(antal) as total - fra read tabellen. Medfølgende kriterier. Den henter id fra user, tager derefter alle de anmeldelser hvor feltet forfatter er = med user.id. Derefter skal jeg have summen af alle de felter fra read, hvor tekst er = med anmeldelser.id

Jeg skal have dne til at udskrive alle konlonner fra user hvor opsagt = false.

Nogen der kan hjælpe, for jeg er helt lost :)
Avatar billede eagleeye Praktikant
19. august 2004 - 21:51 #1
Skal det være en totale sum, eller en sum pr user?

Eksempel på SQL som laver en sum pr. user ID.



SELECT Sum(read.antal) AS antal, user.ID
FROM read INNER JOIN (user INNER JOIN anmeldelser ON user.id = anmeldelser.forfatter) ON read.teskt = anmeldelser.id
GROUP BY user.ID, user.opsagt
HAVING (((user.opsagt)=False));
Avatar billede spritzer Nybegynder
19. august 2004 - 21:58 #2
sum pr. user
Avatar billede spritzer Nybegynder
19. august 2004 - 22:06 #3
[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'id' as part of an aggregate function.

Set RS_u = Server.CreateObject("ADODB.RecordSet")
RS_u.open "SELECT Sum(read.antal) AS antal, users.id FROM read INNER JOIN (users INNER JOIN anmeldelser ON users.id = anmeldelser.forfatter) ON read.teskt = anmeldelser.id GROUP BY user.id, users.opsagt HAVING (((users.opsagt)=False));" , Conn_crew, 1,3
Do while not RS_u.eof
%>
<tr>
<td bgcolor="#efefef" valign="middle" style="font-family: verdana; font-size: 11px;">
<%=RS_u("firstname")%>&nbsp;<%=RS_u("lastname")%> </td><td><%=StrTotal%></td></tr>
<%
    RS_u.movenext
    loop
%>   

giver et lidt bedre indtryk. - Noget jeg glemte tabellen read har et felt der hedder [Type] til skal være = anmeldelse
Avatar billede eagleeye Praktikant
19. august 2004 - 22:22 #4
Ok prøv lige sådan her så:


RS_u.Open "SELECT user.id, Sum(read.antal) AS SumOfantal, user.opsagt FROM (user INNER JOIN anmeldelser ON user.id = anmeldelser.forfatter) INNER JOIN read ON anmeldelser.id = read.teskt GROUP BY user.id, read.Type, user.opsagt HAVING (((read.Type)='anmeldelse') AND ((user.opsagt)=False));", Conn_crew,1,3
Avatar billede eagleeye Praktikant
19. august 2004 - 22:25 #5
Men du vil gerne havde udskrivet kolonnerne firstname og lastname de er vel også i user tabellen.

Når man har med Count og GROUP BY er man nød til at skrive kolonne navne man kan ikke bare skrive user.* :)
Avatar billede spritzer Nybegynder
19. august 2004 - 22:27 #6
RS_u.Open "SELECT users.id, Sum(read.antal) AS SumOfantal, user.opsagt FROM (users INNER JOIN anmeldelser ON users.id = anmeldelser.forfatter) INNER JOIN read ON anmeldelser.id = read.teskt GROUP BY users.id, read.Type, users.opsagt HAVING (((read.Type)='anmeldelse') AND ((users.opsagt)=False));", Conn_crew,1,3

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2.

Hvad så end det betyder
Avatar billede eagleeye Praktikant
19. august 2004 - 22:28 #7
Bruger du ikke Access?
Typsik betyder det at der nogle kolonne navne der er angivet i SQL sætnigne som den ikke kan finde.
Avatar billede spritzer Nybegynder
19. august 2004 - 22:30 #8
okay det avr lidt taste fejl her og der. nu får jeg fejl efter min do while not

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/top1.asp, line 133
denne linje <%=RS_u("firstname")%>&nbsp;<%=RS_u("lastname")%> </td><td><%=RS_u("SumOfantal")%>
Avatar billede eagleeye Praktikant
19. august 2004 - 22:33 #9
Ok det så fordi den ikke lige nu henter firstname og lastname ud så du må SQL til denne:

RS_u.Open "SELECT Sum(read.antal) AS SumOfantal, user.firstname, user.lastname FROM user INNER JOIN (anmeldelser INNER JOIN read ON anmeldelser.id = read.teskt) ON user.id = anmeldelser.forfatter GROUP BY read.Type, user.opsagt, user.firstname, user.lastname HAVING (((read.[Type])="anmeldelse") AND ((user.opsagt)=False));", Conn_crew,1,3
Avatar billede eagleeye Praktikant
19. august 2004 - 22:37 #10
det vist mig som skriver forkert i SQL sætningen read.teskt det skal være read.tekst :)
Avatar billede eagleeye Praktikant
19. august 2004 - 22:40 #11
doh det er vist ved at være sende tid for mig :) "anmeldelse" skal jo være 'anmeldelse'
Avatar billede spritzer Nybegynder
19. august 2004 - 22:40 #12
Microsoft VBScript compilation  error '800a0401'

Expected end of statement

/top1.asp, line 128

RS_u.Open "SELECT Sum(read.antal) AS SumOfantal, users.firstname, users.lastname FROM users INNER JOIN (anmeldelser INNER JOIN read ON anmeldelser.id = read.teskt) ON users.id = anmeldelser.forfatter GROUP BY read.Type, users.opsagt, users.firstname, users.lastname HAVING (((read.[Type])="anmeldelse") AND ((users.opsagt)=False));", Conn_crew,1,3
-------------------------------------------------------------------------------------
(((read.[Type])="anmeldelse")
-----------------^

:)
Avatar billede spritzer Nybegynder
19. august 2004 - 22:40 #13
hehe retter :D
Avatar billede spritzer Nybegynder
19. august 2004 - 22:42 #14
så tror jeg sgu den er der :)
Avatar billede eagleeye Praktikant
19. august 2004 - 22:47 #15
Ok :)
Avatar billede eagleeye Praktikant
19. august 2004 - 22:49 #16
og vil du havde sorteret efter sum(antal) kan du jo tilføje en ORDER BY tilsidst i SQL sætningen, enten med eller uden DESC:

ORDER BY Sum(read.antal)
Avatar billede spritzer Nybegynder
19. august 2004 - 22:52 #17
eagleeye = "SQL troldmand og tankelæser"

Takker for hjælpen!
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
Kurser inden for grundlæggende programmering

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