Mijn vraag
Ik heb een database gemaakt (kan nog aangepast worden indien nodig) welke bestaat uit 2 tabellen:
Tabel 1: locaties
klantnummer (PK, int, not null)
locatie (PK, varchar(32), not null)
gebouw (varchar(32), null)
Tabel 2: log
index (PK, int, not null)
klantnummer (int, not null)
locatie (varchar(32), not null)
oproeppunt (varchar(32), not null)
datumtijd(datetime, not null)
status (varchar(5), not null)
In tabel locaties komen alle locaties te staan welke via script uit een backup file genereert worden. In theorie zal elke locatie ook een gebouw moeten hebben maar het kan in een exotisch geval voorkomen dat dit niet het geval is (nog niet tegen gekomen)
In tabel log komen de diverse 'set' en 'clear' meldingen van de diverse locaties. (1 locatie kan meermaals in log voorkomen)
De reden van toevoeging oproeppunt is dat 1 locaties diverse oproeppunten kan hebben. Deze is voor mijn overzicht nu niet belangrijk
Zoals in het voorbeeld te zien is, kunnen set en clear door elkaar heen komen.
Log.locatie en locaties.locatie zijn altijd identiek qua tekst.
Wat wil ik gaan bereiken:
Ik wil met de query alle meeste recente log vermelding hebben van alle locaties. Als deze niet in log voorkomen zou ik het liefst een standaard waarde bij het resultaat willen zien. Het mooiste resultaat zou voor mij als volgt zijn:
Relevante software en hardware die ik gebruik
MS SQL Server express 15.0
SQL studio management 18.4
Query wordt uiteindelijk via powershell gebruikt maar het vullen van de database doe ik daar nu ook al mee dus als de juiste query er is zal dat geen probleem moeten vormen.
Wat ik al gevonden of geprobeerd heb
resultaat:
De spatie voor D195 is onderdeel van de naam
Dit geeft resultaat maar zonder de gewenste extra kolommen. Als ik locaties.klantnummer en locaties.gebouw in de select toevoeg komt er een 'Column 'locaties.klantnummer' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.'
Ook met de volgende query krijg ik een error:
error:
Ik heb een database gemaakt (kan nog aangepast worden indien nodig) welke bestaat uit 2 tabellen:
Tabel 1: locaties
klantnummer (PK, int, not null)
locatie (PK, varchar(32), not null)
gebouw (varchar(32), null)
Tabel 2: log
index (PK, int, not null)
klantnummer (int, not null)
locatie (varchar(32), not null)
oproeppunt (varchar(32), not null)
datumtijd(datetime, not null)
status (varchar(5), not null)
In tabel locaties komen alle locaties te staan welke via script uit een backup file genereert worden. In theorie zal elke locatie ook een gebouw moeten hebben maar het kan in een exotisch geval voorkomen dat dit niet het geval is (nog niet tegen gekomen)
In tabel log komen de diverse 'set' en 'clear' meldingen van de diverse locaties. (1 locatie kan meermaals in log voorkomen)
De reden van toevoeging oproeppunt is dat 1 locaties diverse oproeppunten kan hebben. Deze is voor mijn overzicht nu niet belangrijk
Zoals in het voorbeeld te zien is, kunnen set en clear door elkaar heen komen.
code:
1
2
3
| index klantnummer locatie oproeppunt datumtijd status 3250 111222 B344P. B344P 2020-02-29 23:10:33.000 Set 3251 111222 D185P. D185P 2020-02-29 23:10:35.000 Clear |
Log.locatie en locaties.locatie zijn altijd identiek qua tekst.
Wat wil ik gaan bereiken:
Ik wil met de query alle meeste recente log vermelding hebben van alle locaties. Als deze niet in log voorkomen zou ik het liefst een standaard waarde bij het resultaat willen zien. Het mooiste resultaat zou voor mij als volgt zijn:
code:
1
2
3
4
| klantnummer locatie gebouw datumtijd 111222 D100s Geb.A 2020-03-17 12:30:00 111222 D101p Geb.A Geen oproep 111222 D105s Geb.A 2020-03-17 12:40:00 |
Relevante software en hardware die ik gebruik
MS SQL Server express 15.0
SQL studio management 18.4
Query wordt uiteindelijk via powershell gebruikt maar het vullen van de database doe ik daar nu ook al mee dus als de juiste query er is zal dat geen probleem moeten vormen.
Wat ik al gevonden of geprobeerd heb
SQL:
1
| SELECT log.locatie, max(log.datumtijd) As tijdstip from log left join locaties ON log.locatie=locaties.locatie where status='set' group by log.locatie order by log.locatie |
resultaat:
code:
1
2
3
| locatie oproep D195P-1 2020-03-10 12:13:25.000 D195P-2 2020-03-10 11:47:34.000 |
De spatie voor D195 is onderdeel van de naam

Dit geeft resultaat maar zonder de gewenste extra kolommen. Als ik locaties.klantnummer en locaties.gebouw in de select toevoeg komt er een 'Column 'locaties.klantnummer' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.'
Ook met de volgende query krijg ik een error:
SQL:
1
| SELECT locaties.locatie, max(log.datumtijd) As Tijdstip from log locaties full outer join locaties ON log.locatie=locaties.locatie where status='set' group by log.locatie order by log.locatie |
error:
Heb ook nog wat geprobeerd met COALESCE maar ook hier kom ik niet verder meeMsg 1012, Level 16, State 1, Line 1
The correlation name 'locaties' has the same exposed name as table 'locaties'.

Taal fouten inbegrepen ;)
Mijn AI Art YouTube kanaal