MS SQL Server 2005 en CROSS APPLY
Vandaag kreeg ik het verzoek om in een view alle gekoppelde medewerkers in 1 kolom te tonen die bij een client horen. Dit kan een behoorlijk lastige klus zijn en ik wist ook niet precies hoe ik zoiets zou moeten gaan oplossen. Een CURSOR
zou mogelijk zijn, maar dat gebruik ik liever niet in de view die ik nu moet maken.
Na even zoeken kwam ik achter een nieuwe functie die bij SQL 2005 is geimplementeerd en gelukkig ook in SQL 2008 werkt, namelijk de CROSS APPLY
.
Hiermee is het mogelijk om kruistabellen te maken (zo leg ik het maar even uit) en die gegevens in 1 kolom te tonen. Dat is tenminste waar ik het momenteel voor misbruik. Door bijvoorbeeld een query als volgt op te stellen krijg je 1 kolom met het ID van een persoon en een tweede kolom met daarin alle gekoppelde medewerkers.
SELECT stamtabel.case_id, hulpverleners = LEFT(o.list, len(o.list)-1)
FROM stamtabel
CROSS APPLY ( SELECT CONVERT( NVARCHAR(255), hulpverlener) +', ' AS [text()]
FROM medewerkerkoppeltabel bhpc
WHERE bhpc.case_id = stamtabel.case_id FOR XML PATH('') ) o (list)
WHERE stamtabel.case_id IN (65186, 46443, 57451, 45327)
Het resultaat dat je hier uit krijgt is als volgt:
57451 | 100, 200, 300, 400 65186 | 100, 122, 10 etc...
Precies wat ik nodig heb. Nu moet ik nog wel even de naam van de medewerkers ophalen in plaats van het ID, maar het concept werkt in ieder geval. Dit is toch een functie die enorm handig kan zijn.
Volgens mij misbruik ik de functionaliteit nu wel een beetje, maar dat maakt voor nu niet uit. Het werkt en de verwachting is dat dit ook wel blijft werken.