28. november 2006 - 14:19Der er
8 kommentarer og 2 løsninger
Advanceret SQL sætning med case?
Hejsa!
Jeg har læst i en bog at man kan bruge case sætninger i sin MS SQL, men jeg har ikke helt lært det endnu og jeg har selvfølgelig ikke lige bogen ved min side nu hvor jeg skal bruge det. :-)
Kort sagt er jeg ved at lave en simpel nyhedsfunktion hvor hver nyhed har en oprettet dato og så et ja/nej felt, hvis nyheden skal være en "sticky" - altså altid ligge øverst.
Det jeg så gerne vil have min SQL til er, at hente alle nyheder ud fra databasen som enten er nyere end 30 dage gamle ELLER er en sticky, sådan så sticky'er altid bliver hevet ud uanset oprettet dato, men hvor ikke-sticky nyheder kun bliver vist hvis de er nyere end 30 dage gamle.
tabellen hedder "news", felterne hedder "createdDate" og "sticky".
beef12> Hvis du bruger UNION i denne sammenhæng, skal du nok ikke have ALL med, da du vil få dubletter. Alle Sticky som er mindre end 30 dage gamle, vil komme med to gange. Hvis du kún bruger UNION og ikke UNION ALL, vil du ikke få dubletter med.
Der er ingen grund til at bruge CASE her. CASE er hvis du vil have flere forskellige udtryk udfra et bestemt logisk udtryk. CASE bruges i SELECT-delen af SQL-sætningen, ikke i WHERE.
Et eksempel fra BOOKS ONLINE:
SELECT 'Price Category' = CASE WHEN price IS NULL THEN 'Not yet priced' WHEN price < 10 THEN 'Very Reasonable Title' WHEN price >= 10 and price < 20 THEN 'Coffee Table Title' ELSE 'Expensive book!' END, CAST(title AS varchar(20)) AS 'Shortened Title' FROM titles ORDER BY price
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.