Avatar billede cesil Nybegynder
11. november 2002 - 16:33 Der er 13 kommentarer og
1 løsning

SUM i WHERE

Hej Eksperter
Jeg har følgende Select:


SELECT MAX_MEETINGROOM_BOOKED.dateto,MAX_MEETINGROOM_BOOKED.datefrom, MAX_MEETINGROOM.* FROM MAX_MEETINGROOM_BOOKED INNER JOIN MAX_MEETINGROOM ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid WHERE (SUM(MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs)<=2) or datefrom >= '20021112 00:00' and dateto <= '20021112 23:59' AND (NOT ('20021112 11:30' BETWEEN datefrom AND dateto )) AND (NOT ('20021112 01:00' BETWEEN datefrom AND dateto )) order by meetingname, datefrom


Jeg har en SUM i min where clause. Det er den der giver mig problemer. Kan min select laves om så jeg godt må ha den med uden at jeg får fejlen:

An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.
Avatar billede pierrehusted Nybegynder
11. november 2002 - 16:37 #1
Prøv at sætte SUM op i SELECT delen. F.eks. sådan her :


SELECT MAX_MEETINGROOM_BOOKED.dateto,MAX_MEETINGROOM_BOOKED.datefrom, MAX_MEETINGROOM.* FROM MAX_MEETINGROOM_BOOKED INNER JOIN MAX_MEETINGROOM ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid, SUM(MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs) as talt_sammen
WHERE (talt_sammen<=2) or datefrom >= '20021112 00:00' and dateto <= '20021112 23:59' AND (NOT ('20021112 11:30' BETWEEN datefrom AND dateto )) AND (NOT ('20021112 01:00' BETWEEN datefrom AND dateto ))
order by meetingname, datefrom
Avatar billede cesil Nybegynder
12. november 2002 - 07:44 #2
Jeg har nu prøvet at sætte sum op i select delen:

SELECT    MAX_MEETINGROOM_BOOKED.dateto, MAX_MEETINGROOM_BOOKED.datefrom, MAX_MEETINGROOM.*, SUM(MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs) AS talt_sammen
FROM        MAX_MEETINGROOM_BOOKED INNER JOIN
                      MAX_MEETINGROOM ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid
WHERE    (talt_sammen <= 2) OR
                      datefrom >= '20021112 00:00' AND dateto <= '20021112 23:59' AND (NOT ('20021112 11:30' BETWEEN datefrom AND dateto)) AND
                      (NOT ('20021112 01:00' BETWEEN datefrom AND dateto))
ORDER BY meetingname, datefrom

Det giver følgende fejl:
Invalid column name 'talt_sammen'.
Avatar billede pierrehusted Nybegynder
12. november 2002 - 08:19 #3
Hmmm....  Har ikke prøvet sådan noget før.
Men hvad så hvis du sætter SUM i Select delen og samtidig i Where.


SELECT    MAX_MEETINGROOM_BOOKED.dateto, MAX_MEETINGROOM_BOOKED.datefrom, MAX_MEETINGROOM.*, SUM(MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs) AS talt_sammen
FROM        MAX_MEETINGROOM_BOOKED INNER JOIN
                      MAX_MEETINGROOM ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid
WHERE    (SUM(MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs) <= 2) OR
                      datefrom >= '20021112 00:00' AND dateto <= '20021112 23:59' AND (NOT ('20021112 11:30' BETWEEN datefrom AND dateto)) AND
                      (NOT ('20021112 01:00' BETWEEN datefrom AND dateto))
ORDER BY meetingname, datefrom
Avatar billede cesil Nybegynder
12. november 2002 - 09:10 #4
Det giver samme fejl som før. Aggregate......
Avatar billede pierrehusted Nybegynder
12. november 2002 - 09:20 #5
Kan du ikke maile mig tabeldefinitionerne og lidt data. Så kan jeg eksperimentere lidt.

pierre@pi-hus.dk
Avatar billede pierrehusted Nybegynder
12. november 2002 - 09:48 #6
Jeg har prøvet at fjerne SUM omkring din beregning, og så kører den fint. Men er det det resultat du vil have ??




SELECT MAX_MEETINGROOM_BOOKED.dateto,MAX_MEETINGROOM_BOOKED.datefrom, MAX_MEETINGROOM.*

FROM MAX_MEETINGROOM_BOOKED INNER JOIN MAX_MEETINGROOM
ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid

WHERE (MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs<=2) or datefrom >= '20021112 00:00' and dateto <= '20021112 23:59'
AND (NOT ('20021112 11:30' BETWEEN datefrom AND dateto )) AND (NOT ('20021112 01:00' BETWEEN datefrom AND dateto ))
order by meetingname, datefrom
Avatar billede cesil Nybegynder
12. november 2002 - 10:08 #7
Fint. Jeg troede SUM skulle med når man laver beregninger.
Tak for hjælpen
Avatar billede cesil Nybegynder
12. november 2002 - 10:09 #8
Forøvrigt. Vil du tjene 30 point mere?
Avatar billede pierrehusted Nybegynder
12. november 2002 - 10:11 #9
Lad høre..
Avatar billede cesil Nybegynder
12. november 2002 - 10:16 #10
Som min select er nu henter jeg alle de poster der er i begge tabeller. Det skal være sådan at mit resultat også indeholder de mødelokaler der er i MAX_MEETINGROOM men som ikke er i MAX_MEETINGROOM_BOOKED.
På dansk er det de mødelokaler der ikke er booked endnu den valgte dag.
Avatar billede pierrehusted Nybegynder
12. november 2002 - 10:37 #11
Det ville jeg nok gøre ved at lave en liste over mødelokaler:

SELECT MAX_MEETINGROOM.* FROM MAX_MEETINGROOM


Og så ud fra den søge i bookingerne med næste samme søgning som før, men søge på det specifikke mødelokale.


SELECT MAX_MEETINGROOM_BOOKED.dateto,MAX_MEETINGROOM_BOOKED.datefrom, MAX_MEETINGROOM.*

FROM MAX_MEETINGROOM_BOOKED INNER JOIN MAX_MEETINGROOM
ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid

WHERE (MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs<=2) or datefrom >= '20021112 00:00' and dateto <= '20021112 23:59'
AND (NOT ('20021112 11:30' BETWEEN datefrom AND dateto )) AND (NOT ('20021112 01:00' BETWEEN datefrom AND dateto )) AND MAX_MEETINGROOM.id = 3
order by meetingname, datefrom
Avatar billede cesil Nybegynder
12. november 2002 - 10:53 #12
Sådan skal det ikke fungerer.
Udfra dato og tidspunkter skal man have en liste over samtlige mødelokaler der er til rådighed
Avatar billede pierrehusted Nybegynder
12. november 2002 - 10:57 #13
Du kan jo sagtens lave det i siden/programmet sådan at brugeren ikke kan se at du laver flere SQL kald.
Avatar billede cesil Nybegynder
12. november 2002 - 11:08 #14
Jeg vil nu helst at jeg kun har et select at arbejde med. Det andet er vist noget fusk ;-)
Jeg tror jeg laver et nyt spørgsmål, der skal nemlig også puttes noget mere ind i min select. Så kan du jo svare der hvis du vil.
Men tak for hjælpen indtil videre.
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