Avatar billede cesil Nybegynder
11. september 2002 - 10:08 Der er 25 kommentarer og
1 løsning

Or i select igen igen

Hej Eksperter
Den her er ikke nem.
som det er nu er resultatet 4 poster, hvor der faktisk gerne skulle være 5. problemet er at den 5 post bliver sorteret fra i disse linier: 

(WPMProject.Active = 1) AND
(WPMProjectFlow.StartDate > '01/01/02') AND (WPMProjectFlow.StartDate > '07/01/02') AND
(WPMProjectFlow.ProjectID = 43) AND (WPMProjectFlow.StartDate > '07/08/02') AND

De to linier her skulle hente den 5 post

(WPMProjectFlowHours.datestep < 8 OR
WPMProjectFlowHours.datestep IS NULL)

Men hvordan gør jeg det?    
Her er hele min query

SELECT    WPMProjectFlowHours.datestep, ACMUser.Username, WPMProjectFlow.ID, WPMProjectFlow.UserID, WPMProjectFlow.StartDate,
                      WPMProjectFlow.StopDate, WPMProjectFlow.ActualStartDate, WPMProjectFlow.ActualStopDate, WPMProjectFlow.WorkTypeID,
                      WPMProjectWorkType.Name AS pname, WPMProjectFlow.Name, WPMProjectFlow.Description
FROM        ACMUser INNER JOIN
                      WPMProjectFlow ON ACMUser.ID = WPMProjectFlow.UserID INNER JOIN
                      WPMProject ON WPMProject.ID = WPMProjectFlow.ProjectID INNER JOIN
                      WPMProjectWorkType ON WPMProjectFlow.WorkTypeID = WPMProjectWorkType.ID LEFT OUTER JOIN
                      WPMProjectFlowHours ON WPMProjectFlow.ID = WPMProjectFlowHours.flowid

WHERE   

          (WPMProject.Active = 1) AND (WPMProjectFlow.StartDate > '01/01/02') AND (WPMProjectFlow.StartDate > '07/01/02') AND
                      (WPMProjectFlow.ProjectID = 43) AND (WPMProjectFlow.StartDate > '07/08/02') AND
       
        (WPMProjectFlowHours.datestep < 8 OR
                      WPMProjectFlowHours.datestep IS NULL)

OR


                      (WPMProject.Active = 1) AND (WPMProjectFlow.StartDate > '01/01/02') AND (WPMProjectFlow.ProjectID = 43) AND
                      (WPMProjectFlow.StopDate < '07/01/02') AND (WPMProjectFlow.StopDate < '07/08/02') AND

          (WPMProjectFlowHours.datestep < 8 OR
                      WPMProjectFlowHours.datestep IS NULL)



ORDER BY WPMProjectFlow.StartDate
Avatar billede ocp Nybegynder
11. september 2002 - 10:13 #1
Prøv om det ikke hjælper at separere de to OR-statments:

SELECT    WPMProjectFlowHours.datestep, ACMUser.Username, WPMProjectFlow.ID, WPMProjectFlow.UserID, WPMProjectFlow.StartDate,
                      WPMProjectFlow.StopDate, WPMProjectFlow.ActualStartDate, WPMProjectFlow.ActualStopDate, WPMProjectFlow.WorkTypeID,
                      WPMProjectWorkType.Name AS pname, WPMProjectFlow.Name, WPMProjectFlow.Description
FROM        ACMUser INNER JOIN
                      WPMProjectFlow ON ACMUser.ID = WPMProjectFlow.UserID INNER JOIN
                      WPMProject ON WPMProject.ID = WPMProjectFlow.ProjectID INNER JOIN
                      WPMProjectWorkType ON WPMProjectFlow.WorkTypeID = WPMProjectWorkType.ID LEFT OUTER JOIN
                      WPMProjectFlowHours ON WPMProjectFlow.ID = WPMProjectFlowHours.flowid

WHERE   
(
          (WPMProject.Active = 1) AND (WPMProjectFlow.StartDate > '01/01/02') AND (WPMProjectFlow.StartDate > '07/01/02') AND
                      (WPMProjectFlow.ProjectID = 43) AND (WPMProjectFlow.StartDate > '07/08/02') AND
       
        (WPMProjectFlowHours.datestep < 8 OR
                      WPMProjectFlowHours.datestep IS NULL)
)
OR
(

                      (WPMProject.Active = 1) AND (WPMProjectFlow.StartDate > '01/01/02') AND (WPMProjectFlow.ProjectID = 43) AND
                      (WPMProjectFlow.StopDate < '07/01/02') AND (WPMProjectFlow.StopDate < '07/08/02') AND

          (WPMProjectFlowHours.datestep < 8 OR
                      WPMProjectFlowHours.datestep IS NULL)
)


ORDER BY WPMProjectFlow.StartDate
Avatar billede ocp Nybegynder
11. september 2002 - 10:14 #2
...og så skal der vel stå OR i stedet for AND før det statment der udvælger den 5. række?
Avatar billede terry Ekspert
11. september 2002 - 10:14 #3
Just as wild guess

SELECT    WPMProjectFlowHours.datestep, ACMUser.Username, WPMProjectFlow.ID, WPMProjectFlow.UserID, WPMProjectFlow.StartDate,
                      WPMProjectFlow.StopDate, WPMProjectFlow.ActualStartDate, WPMProjectFlow.ActualStopDate, WPMProjectFlow.WorkTypeID,
                      WPMProjectWorkType.Name AS pname, WPMProjectFlow.Name, WPMProjectFlow.Description
FROM        ACMUser INNER JOIN
                      WPMProjectFlow ON ACMUser.ID = WPMProjectFlow.UserID INNER JOIN
                      WPMProject ON WPMProject.ID = WPMProjectFlow.ProjectID INNER JOIN
                      WPMProjectWorkType ON WPMProjectFlow.WorkTypeID = WPMProjectWorkType.ID LEFT OUTER JOIN
                      WPMProjectFlowHours ON WPMProjectFlow.ID = WPMProjectFlowHours.flowid

WHERE   

          ((WPMProject.Active = 1) AND (WPMProjectFlow.StartDate > '01/01/02') AND (WPMProjectFlow.StartDate > '07/01/02') AND
                      (WPMProjectFlow.ProjectID = 43) AND (WPMProjectFlow.StartDate > '07/08/02') AND
       
        (WPMProjectFlowHours.datestep < 8 OR
                      WPMProjectFlowHours.datestep IS NULL) )

OR


                      ((WPMProject.Active = 1) AND (WPMProjectFlow.StartDate > '01/01/02') AND (WPMProjectFlow.ProjectID = 43) AND
                      (WPMProjectFlow.StopDate < '07/01/02') AND (WPMProjectFlow.StopDate < '07/08/02') AND

          (WPMProjectFlowHours.datestep < 8 OR
                      WPMProjectFlowHours.datestep IS NULL))
Avatar billede cesil Nybegynder
11. september 2002 - 10:51 #4
Ocp --> Det hjælper ikke. Resultatet bliver det samme.
Nej der skal stå AND. OR vil gi alle poster og blive opfattet som var den uden for den øvrige select. Måske problemet i virkeligheden er at min query ikke er struktureret ordentligt. I så fald må der være en metode til at holde AND og OR samlet så det ikke kan misforstået af sql-serveren.

Terry --> Nope, giver samme resultat
Avatar billede terry Ekspert
11. september 2002 - 10:54 #5
Just out of interest. Your DATES must be formatted either YYYY-MM-DD or MM-DD-YYYY

From th edates in your SQL I can not see how they are formatted!
Avatar billede cesil Nybegynder
11. september 2002 - 11:00 #6
Det er ikke der problemet ligger. Det virker fint nok med datoerne. Det giver ingen ændringer hvis jeg laver mine datoer om til MM-DD-YYYY
Avatar billede terry Ekspert
11. september 2002 - 11:02 #7
where are you generating this SQL? Why dont you copy it to Query Analyzer, this should give you some indication as to where the problem is.
Avatar billede ocp Nybegynder
11. september 2002 - 11:03 #8
Måske skulle du også lige kigge på dine start- og stopdato'er. Se f.eks. her:

(WPMProjectFlow.StartDate > '01/01/02') AND (WPMProjectFlow.StartDate > '07/01/02')
Avatar billede ocp Nybegynder
11. september 2002 - 11:05 #9
Kan du beskrive i ord hvordan dette statement skal virke i sammenhængen? Jeg har en fornemmelse af hvad du prøver at lave, men jeg vil lige være sikker:

(WPMProjectFlowHours.datestep < 8 OR
WPMProjectFlowHours.datestep IS NULL)
Avatar billede cesil Nybegynder
11. september 2002 - 11:23 #10
Ocp --> Den første dato (WPMProjectFlow.StartDate > '01/01/02') er hardcoded. Det er bare for at jeg ikke får gamle data med. De to andre er variabler fra min asp side. Du har ret i at
den ene er overflødig, den er væk nu. Mit statement skal hente personer der er ledige Fra en dato til en dato.  (WPMProjectFlowHours.datestep < 8 OR WPMProjectFlowHours.datestep IS NULL)
skal give mig de personer der er ledige noget af dagen. Hvis der står NULL er de helt fri i perioden og er datestep under 8 er de ledige noget af en dag i det indtastede tidsrum.

SELECT    WPMProjectFlowHours.datestep, ACMUser.Username, WPMProjectFlow.ID, WPMProjectFlow.UserID, WPMProjectFlow.StartDate,
                      WPMProjectFlow.StopDate, WPMProjectFlow.ActualStartDate, WPMProjectFlow.ActualStopDate, WPMProjectFlow.WorkTypeID,
                      WPMProjectWorkType.Name AS pname, WPMProjectFlow.Name, WPMProjectFlow.Description
FROM        ACMUser INNER JOIN
                      WPMProjectFlow ON ACMUser.ID = WPMProjectFlow.UserID INNER JOIN
                      WPMProject ON WPMProject.ID = WPMProjectFlow.ProjectID INNER JOIN
                      WPMProjectWorkType ON WPMProjectFlow.WorkTypeID = WPMProjectWorkType.ID LEFT OUTER JOIN
                      WPMProjectFlowHours ON WPMProjectFlow.ID = WPMProjectFlowHours.flowid
WHERE   

          (WPMProject.Active = 1) AND (WPMProjectFlow.StartDate > '01/01/02') AND (WPMProjectFlow.StartDate > '07/08/02') AND
                      (WPMProjectFlow.ProjectID = 43) AND (WPMProjectFlowHours.datestep < 8 OR
                      WPMProjectFlowHours.datestep IS NULL)

OR

                      (WPMProject.Active = 1) AND (WPMProjectFlow.StartDate > '01/01/02') AND (WPMProjectFlow.ProjectID = 43) AND
                      (WPMProjectFlow.StopDate < '07/01/02') AND (WPMProjectFlowHours.datestep < 8 OR
                      WPMProjectFlowHours.datestep IS NULL)


ORDER BY WPMProjectFlow.StartDate
Avatar billede cesil Nybegynder
11. september 2002 - 11:23 #11
Terry --> Jeg afprøver det i SQL-panelet i Server Enterprise manageren. Kan jeg hente flere oplysninger ud af Query analyseren?
Avatar billede terry Ekspert
11. september 2002 - 11:27 #12
No but it is easier to see exactly which records you are finding!
You could also make a VIEW (Enterprise Manager), here you have a visual designer much like Access
Avatar billede cesil Nybegynder
11. september 2002 - 11:32 #13
Terry: Jeg får samme resultat i Query analyseren.
Avatar billede terry Ekspert
11. september 2002 - 11:34 #14
Yes you should, but can you see from the records which you are getting what the problem may be? Try it as  a VIEW
Avatar billede ocp Nybegynder
11. september 2002 - 11:43 #15
Du er klar over at der er et "hul" i din forespørgsel: Stopdate i nederste og startdate i øverst del gør at forespørgslen springer 7 måneder over?
Avatar billede cesil Nybegynder
11. september 2002 - 11:52 #16
Det er et hul på syv dage. Det er dem der er ledige i de syv dage jeg vil have fat i.
Avatar billede ocp Nybegynder
11. september 2002 - 13:01 #17
Prøv lige at se hvordan denne her virker:

SELECT    WPMProjectFlowHours.datestep, ACMUser.Username, WPMProjectFlow.ID, WPMProjectFlow.UserID, WPMProjectFlow.StartDate,
                      WPMProjectFlow.StopDate, WPMProjectFlow.ActualStartDate, WPMProjectFlow.ActualStopDate, WPMProjectFlow.WorkTypeID,
                      WPMProjectWorkType.Name AS pname, WPMProjectFlow.Name, WPMProjectFlow.Description
FROM        ACMUser INNER JOIN
                      WPMProjectFlow ON ACMUser.ID = WPMProjectFlow.UserID INNER JOIN
                      WPMProject ON WPMProject.ID = WPMProjectFlow.ProjectID INNER JOIN
                      WPMProjectWorkType ON WPMProjectFlow.WorkTypeID = WPMProjectWorkType.ID LEFT OUTER JOIN
                      WPMProjectFlowHours ON WPMProjectFlow.ID = WPMProjectFlowHours.flowid
WHERE   
          (WPMProject.Active = 1)
AND                (WPMProjectFlow.ProjectID = 43)
AND             (WPMProjectFlow.StartDate > cast('20020708' as datetime))
AND             (WPMProjectFlow.StopDate < cast('20020701' as datetime) or WPMProjectFlow.StopDate is null)
AND             (WPMProjectFlowHours.datestep < 8 OR
          WPMProjectFlowHours.datestep IS NULL)
Avatar billede cesil Nybegynder
11. september 2002 - 13:20 #18
Startdato og stopdato skulle lige byttes rundt. men ellers gav den en post. Nemlig den der havde et datestep under 8. Det var den der manglede i min version
Avatar billede cesil Nybegynder
11. september 2002 - 13:25 #19
Dem der mangler er dem der ligger før og efter det valgte tidsrum.
Avatar billede ocp Nybegynder
11. september 2002 - 13:33 #20
Hvad så nu?

SELECT    WPMProjectFlowHours.datestep, ACMUser.Username, WPMProjectFlow.ID, WPMProjectFlow.UserID, WPMProjectFlow.StartDate,
                      WPMProjectFlow.StopDate, WPMProjectFlow.ActualStartDate, WPMProjectFlow.ActualStopDate, WPMProjectFlow.WorkTypeID,
                      WPMProjectWorkType.Name AS pname, WPMProjectFlow.Name, WPMProjectFlow.Description
FROM        ACMUser INNER JOIN
                      WPMProjectFlow ON ACMUser.ID = WPMProjectFlow.UserID INNER JOIN
                      WPMProject ON WPMProject.ID = WPMProjectFlow.ProjectID INNER JOIN
                      WPMProjectWorkType ON WPMProjectFlow.WorkTypeID = WPMProjectWorkType.ID LEFT OUTER JOIN
                      WPMProjectFlowHours ON WPMProjectFlow.ID = WPMProjectFlowHours.flowid
WHERE   
      WPMProject.Active = 1
AND        WPMProjectFlow.ProjectID = 43
AND     (
                (
                    (
                        WPMProjectFlow.StopDate >= cast('20020708' as datetime)
                        AND WPMProjectFlow.StartDate <= cast('20020701' as datetime)
                    )
                    AND
                    (   
                        WPMProjectFlowHours.datestep < 8
                        OR WPMProjectFlowHours.datestep IS NULL
                    )
                )
            OR
                (
                    WPMProjectFlow.StopDate < cast('20020701' as datetime)
                    OR
                    WPMProjectFlow.StartDate > cast('20020708' as datetime)
                )
            )

ORDER BY WPMProjectFlow.StartDate
Avatar billede ocp Nybegynder
11. september 2002 - 13:35 #21
Ellers må du sende mig databasen - så vil jeg <B>garantere</B> at jeg kan få skidtet til at virke
Avatar billede cesil Nybegynder
11. september 2002 - 13:45 #22
Nu får du samme resultat som mig, nemlig uden ham du fik med først.
Med den garanti sender jeg gerne databasen til dig. :-)
Bare som en backup eller hvad?
Avatar billede cesil Nybegynder
11. september 2002 - 13:47 #23
Det kommer vist til at koste mig 100 ekstra.
Avatar billede ocp Nybegynder
11. september 2002 - 13:58 #24
Backup er fint. Send den til AnonymAnonym715@hotmail.com
Avatar billede ocp Nybegynder
11. september 2002 - 20:10 #25
Det var ret ligetil:

- Enten skal personen være fri fra projekter i perioden (nederste del af where-statementet.
- Eller også skal han være på deltidsprojekt i perioden (øverste del af projektet)

SELECT    WPMProjectFlowHours.datestep, ACMUser.Username, WPMProjectFlow.ID, WPMProjectFlow.UserID, WPMProjectFlow.StartDate,
        WPMProjectFlow.StopDate, WPMProjectFlow.ActualStartDate, WPMProjectFlow.ActualStopDate, WPMProjectFlow.WorkTypeID,
        WPMProjectWorkType.Name AS pname, WPMProjectFlow.Name, WPMProjectFlow.Description
FROM    ACMUser INNER JOIN
        WPMProjectFlow ON ACMUser.ID = WPMProjectFlow.UserID INNER JOIN
        WPMProject ON WPMProject.ID = WPMProjectFlow.ProjectID INNER JOIN
        WPMProjectWorkType ON WPMProjectFlow.WorkTypeID = WPMProjectWorkType.ID LEFT OUTER JOIN
        WPMProjectFlowHours ON WPMProjectFlow.ID = WPMProjectFlowHours.flowid
WHERE   
          WPMProject.Active = 1
AND    WPMProjectFlow.ProjectID = 43
AND    (
                (
                    WPMProjectFlow.StopDate >= cast('20020701' as datetime)
            AND WPMProjectFlow.StartDate <= cast('20020708' as datetime)
            AND
                        (   
                            WPMProjectFlowHours.datestep < 8
                        OR WPMProjectFlowHours.datestep IS NULL
                    )
                )
            OR
                (
                        (    
                WPMProjectFlow.StopDate < cast('20020701' as datetime)
                          OR WPMProjectFlow.StartDate > cast('20020708' as datetime)
            )
            OR
            (
                WPMProjectFlow.StopDate is null
                AND WPMProjectFlow.StartDate is null
            )
                )

            )

ORDER BY WPMProjectFlow.StartDate


Du forudsætter at der findes en start- eller stopdato. I min kode har jeg taget højde for at personen måske aldrig har været tilknyttet et projekt.

Håber det besvarer dit spørgsmål.
Avatar billede cesil Nybegynder
12. september 2002 - 14:15 #26
Super det virker som det skal.
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