Avatar billede moller06 Nybegynder
01. september 2005 - 12:32 Der er 7 kommentarer og
1 løsning

i et 'where' skal jeg have et 'and if'

Hej.

I mit WHERE statement har jeg en masse and-betingelser der fjerne en del rows.
Men jeg vil også gerne have at jeg kunne skrive
AND IF (noget) så skal den fjerne nogle flere rows.
Kan det lade sig gøre??

Koden ser nogenlunde sådan her ud:
-------------------
WHERE
DVA.dvvedlkategori = 7785 -- planlagt aktivitet
and DVA.dvaktivitetstatus = 7787 -- aktiv status

and BGH.AktueltBudgetJN = 'J'
and DVA.konto <> 51120
and DVA.konto <> 13701

and BGH.budgetfra >= @dato1
and BGH.budgettil <= @dato2
--and DVA.BudgetDato like '%' + @year + '%'
and YEAR(DVA.BudgetDato) <= YEAR(@year)

and DVA.selskabnr = 20 and DVA.ejendomnr = 113 --- midlertidig afgrænsning

-- medtag ikke dem hvor 'maxantalforekomster' er overskredet
and (betingelse) --her er problemet!!
    gør dette: YEAR(DATEADD(yy, (DVA.BudgetGentagHver*(DVA.BudgetGentagMaxAntal-1)), DVA.BudgetDato)) >= YEAR(@year)

-----------------
Avatar billede arne_v Ekspert
01. september 2005 - 12:35 #1
hvad vil du som en helt normal AND ikke gør ?
Avatar billede moller06 Nybegynder
01. september 2005 - 12:38 #2
at den kun skal lave den AND-betingelse hvis et specielt felt ikke er NULL
- fordi eller virker betingelsen ikke.
- feltet "DVA.BudgetGentagMaxAntal" må ikke være NULL
Avatar billede arne_v Ekspert
01. september 2005 - 12:43 #3
du kan bruge en CASE WHEN konstruktion

men jeg gætter på at ISNULL funktionen er tilstrækkelig

ISNULL(DVA.BudgetGentagMaxAntal,magiskværdi)

hvor den magiske værdi får testet til at virke som ønsket når den er NULL
Avatar billede moller06 Nybegynder
01. september 2005 - 13:06 #4
kan man ikke bruge IF på en eller anden måde??

Kan du give et eksempel på CASE - idet jeg ikke kan få det til at spille.

Ja, ISNULL vil kunne gøre det, men det er lidt noget bøvl at bruge.
Avatar billede moller06 Nybegynder
01. september 2005 - 13:09 #5
Dette her virker f.eks. ikke:
---------
and
case when DVA.BudgetGentagMaxAntal = 2
    then YEAR(DATEADD(yy, (DVA.BudgetGentagHver*(DVA.BudgetGentagMaxAntal-1)), DVA.BudgetDato)) >= YEAR(@year)
end
------------
FEJL: Server: Msg 170, Level 15, State 1, Line 67
Line 67: Incorrect syntax near '>'.
Avatar billede arne_v Ekspert
01. september 2005 - 13:16 #6
det skal vel være

... AND CASE WHEN DVA.BudgetGentagMaxAntal IS NULL THEN TRUE ELSE ditudtryk END
Avatar billede moller06 Nybegynder
01. september 2005 - 13:21 #7
----------
AND CASE WHEN DVA.BudgetGentagMaxAntal IS NULL
THEN TRUE
ELSE YEAR(DATEADD(yy, (DVA.BudgetGentagHver*(DVA.BudgetGentagMaxAntal-1)), DVA.BudgetDato)) >= YEAR(@year)
END
-----------
smider samme fejl
Avatar billede moller06 Nybegynder
01. september 2005 - 14:57 #8
!
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