Toon posts:

[MSSQL]Case met "like '%blabla%' " kan niet?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben helemaal geen programmeur, maar wegens nood toch maar een stukje maatwerk aan het bouwen. Dat gezegd hebbende heb ik desondanks toch m'n programmatje bijna af en zit nog met één kleinigheidje.

Wat doe ik:
Ik bouw een .aspx pagina op onze intranet site welke in een tabel op onze SQL server een reeks klanten opzoekt op basis van één van drie velden: klantnummer, postcode en serienummer. De gegevens van deze klanten komen uit drie tabellen en heb ik met een aparte stored procedure uit die verschillende tabellen gehaald en in een door mij voor mij gemaakt tabelletje "weekendklanten" geparkeerd. Hier gaat het nog steeds goed, maar ik wil meer dan de gegevens 1 op 1 overnemen.
De laatste twee velden in de betreffende tabel wul ik met Dekkingstype en Provider. Uit 2 van de 3 klanttabellen komen de dekkingstypes in plain-text en hoeven dus niet bewerkt te worden, de providers komen echter als nummertje tevoorschijn en moeten met een Case statement vervangen worden door lappies tekst.
Die Case ziet er ongeveer zo uit:

code:
1
2
3
4
5
6
Case klproviderid
when 2 then 'Interne klant'
when 3 then 'Groenstra'
when 4 then 'Veenema Groep'
when 5 then 'Autobedrijf Vroem'
when 6 then 'Belwinkel'

enzovoorts. Dit gaat prima, want klproviderid is een numeriek veld.

De derde tabel bevat geen provider code, hier zet ik dus altijd hard de tekst met de provider naam in. Echter, het dekkingstype hier bestaat uit een tekstveld met merdere codes, van vierletters en één of geen cijfers eraanvast. Bevat deze tekst de code "GEGA" dan moet de tekst in de kolom "Gegarandeerd" worden, en anders "Best Effort"

De case zou er dan zo uitzien:
code:
1
2
3
4
5
6
(
 case TK_Dekking 
 when like '%GEGA%'  then 'Gegarandeerd'
 else 'Best Effort'
 end
)


Maar dit gaat dus niet: invalid syntax near like. Schijnbaar is "like" niet geschikt voor gebruik met case.

Nou heb ik zitten denken om bijvoorbeeld zoiets te doen:
code:
1
2
3
4
5
6
7
8
(
if TK_Dekking like '%GEGA%' @variabele = 1
else @variabele = 0
case @variabele
when 1 then 'Gegarandeerd'
else 'Best Effort'
end
)

Maar ook dit schijnt niet te mogen van MSSQL., invalid syntax near if.

Kan wat ik wil? Vast wel, maar ik kom er niet uit en het nesten van de if...else in het select statement gaat me dus gewoon niet lukken.
Kan iemand me een duw de goeie kant op geven?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je moet de andere constructie van case when gebruiken:

SQL:
1
2
3
4
5
SELECT CASE 
         WHEN TK_Dekking LIKE '%GEGA%' THEN 'Gegarandeerd'
            ELSE 'Best effort'
END as AliasNaam
FROM Tabel


edit: relevant stukje uit Books ONline:
Simple CASE function:

CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END

Searched CASE function:

CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END

[ Voor 64% gewijzigd door P_de_B op 03-02-2006 16:27 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Dat stuk uit Books Online had ik ook gevonden, en het staat lettelrijk ook zo in "Professional SQL 2000 programming" dat hier naast me ligt maar ik kon er geen (voor mij) begrijpelijk voorbeeld van vinden. Nou heb ik "end as aliasnaam" veranderd in "end" (ik kon die aliasnaam niet plaatsen en zonder doet ie het ook) en het loopt inderdaad gelijk goed.
Ik snap niet waarom het in deze vorm wél werkt en in de "gewone" vorm niet werkt, maar ik ben je wel dankbaar :)

============
Salandur schreef op vrijdag 03 februari 2006 @ 16:39:
het werkt nu wel omdat er staat 'where kolom_naam like'
en een alias is niets anders dan zelf een logische naam toekennen aan de waarde ipv dat mysql dat voor je doet. dan wordt het iets als expr1
Ach so. |:( dat van die alias had ik moeten weten want ik slecteer al van alles "as" wat anders.

[ Voor 35% gewijzigd door Verwijderd op 03-02-2006 16:54 ]


  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 11:41

Salandur

Software Engineer

het werkt nu wel omdat er staat 'where kolom_naam like'

en een alias is niets anders dan zelf een logische naam toekennen aan de waarde ipv dat mysql dat voor je doet. dan wordt het iets als expr1

[ Voor 57% gewijzigd door Salandur op 03-02-2006 16:46 ]

Assumptions are the mother of all fuck ups | iRacing Profiel