Avatar billede mortency Nybegynder
30. september 2004 - 13:15 Der er 4 kommentarer og
1 løsning

Legge sammen(SUMMER) og if then else i en spørring

Hei!

Jeg skal hente ut data fra to tabeller. Se diagram her --> http://www.cyren.no/diagram2.gif

Spørringen skal bygges opp på følgende måte hvis det er mulig.

Den skal hente ut BID,Regnr og antall dager en bil har ligget aktivt i databasen.

Hvis tblbiler.bid sjekker mot tblloggslettinger.SlettetFKBid er <null> da er
DageSidenOprettelse = DateDiff(d, GjelderFra, getdate()) as DageSidenOprettelse

Hvis tblbiler.bid sjekker mot tblloggslettinger.SlettetFKBid er ikke <null> da er
DageSidenOprettelse = DateDiff(d, GjelderFra, tblbiler.SiOppforsikringFra) as DageSidenOprettelse

da må den videre sjekke regnr om det er registrert flere ganger og liste ut alle periode den eventuelt er lagt inn.
Her må den legge sammen så dataene blir riktig pr REGNR.

Spørringen ser slik ut foreløplig:

SET dateformat dmy

Declare @dato1 datetime
Declare @dato2 datetime

SET @dato1 = '01-01-2003 00:00:00'
SET @dato2 = '31-12-2003 23:59:59'

SELECT
tblbiler.bid,
tblbiler.regnr,
tblbiler.SiOppforsikringFra
tblavdeling.ANavn,
DateDiff(d, tblbiler.GjelderFra, tblbiler.SiOppforsikringFra) as DageSidenOprettelse

FROM
tblBiler,tblAvdeling

WHERE
OprettetDato BETWEEN @dato1 AND @dato2 AND tblbiler.FKBrAvdeling=tblavdeling.AID



Det som skal komme ut av data skal være følgende

Sortert på avdeling

Regnr        Antall dager aktiv i databasen

Sum pr avdeling

OSv...............

//Morten
Avatar billede mortency Nybegynder
30. september 2004 - 14:29 #1
Har kommet litt nærmerere... kan noen hjelpe meg med denne:

SELECT DISTINCT
BID,
Regnr,
ANavn,
GjelderFra,
OpprettetDato,
SiOppForsikringFra,
DateDiff(d, GjelderFra, SioppForsikringFra) as DageSidenOprettelse

FROM

tblhertzkorttidsleiebiler,
tblhertzkorttidsleieAvdeling

WHERE

FKBRAvdeling=AID AND
gjelderfra BETWEEN '01-01-2004 00:00:00' AND '06-01-2004 23:59:59'

Denne fungerer greit men hva hvis SioppForsikringFra er null så skal den sette isteden være DateDiff(d, GjelderFra, getdate()) as DageSidenOprettelse


................
SELECT DISTINCT
BID,
Regnr,
ANavn,
GjelderFra,
SiOppForsikringFra,

If SiOppForsikringFra is null Then
    DateDiff(d, GjelderFra, getdate()) as DageSidenOprettelse
Else
    DateDiff(d, GjelderFra, SioppForsikringFra) as DageSidenOprettelse
End if

FROM

tblhertzkorttidsleiebiler,
tblhertzkorttidsleieAvdeling

WHERE

FKBRAvdeling=AID AND
gjelderfra BETWEEN '01-01-2004 00:00:00' AND '06-01-2004 23:59:59'
Avatar billede zedios Nybegynder
30. september 2004 - 15:28 #2
replace the IF with a CASE then u can run as a single select statement ..

ie:

CASE
  WHEN SiOppForsikringFra is null THEN DateDiff(d, GjelderFra, getdate())
  ELSE DateDiff(d, GjelderFra, SioppForsikringFra)
END AS DageSidenOprettelse
Avatar billede mortency Nybegynder
30. september 2004 - 16:02 #3
Very nice! Thanks! Give an answer so i can give you the points!

//Morten
Avatar billede mortency Nybegynder
13. oktober 2004 - 09:39 #4
Lukker spm
Avatar billede mortency Nybegynder
13. oktober 2004 - 09:39 #5
Da det ikke kommer et 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
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