Commit a0ebdb89 authored by Bart Boone's avatar Bart Boone 🤞🏼

closes #5737 - queries en instructies voor verdere aanvullingen stratenlijst

parent 538b2c21
Pipeline #1498 failed with stages
in 1 minute and 5 seconds
USE master
GO
IF EXISTS(SELECT * FROM sys.databases WHERE name='crab')
DROP DATABASE crab
GO
CREATE DATABASE crab
GO
use crab
go
ALTER TABLE dbo.gem ALTER COLUMN ID int not null
ALTER TABLE dbo.gemnm ALTER COLUMN ID int not null
ALTER TABLE dbo.postkan ALTER COLUMN ID int not null
ALTER TABLE dbo.postknm ALTER COLUMN ID int not null
ALTER TABLE dbo.sstrstrn ALTER COLUMN ID int not null
ALTER TABLE dbo.straatnm ALTER COLUMN ID int not null
ALTER TABLE dbo.subkan ALTER COLUMN ID int not null
ALTER TABLE dbo.subkgem ALTER COLUMN ID int not null
ALTER TABLE dbo.substr ALTER COLUMN ID int not null
ALTER TABLE dbo.substrnm ALTER COLUMN ID int not null
GO
ALTER TABLE dbo.gem ADD PRIMARY KEY(ID)
ALTER TABLE dbo.gemnm ADD PRIMARY KEY(ID)
ALTER TABLE dbo.postkan ADD PRIMARY KEY(ID)
ALTER TABLE dbo.postknm ADD PRIMARY KEY(ID)
ALTER TABLE dbo.sstrstrn ADD PRIMARY KEY(ID)
ALTER TABLE dbo.straatnm ADD PRIMARY KEY(ID)
ALTER TABLE dbo.subkan ADD PRIMARY KEY(ID)
ALTER TABLE dbo.subkgem ADD PRIMARY KEY(ID)
ALTER TABLE dbo.substr ADD PRIMARY KEY(ID)
ALTER TABLE dbo.substrnm ADD PRIMARY KEY(ID)
GO
ALTER TABLE dbo.gemnm
ADD CONSTRAINT FK_gemnm_gem FOREIGN KEY (GEMID) REFERENCES dbo.gem(ID)
GO
ALTER TABLE dbo.postknm
ADD CONSTRAINT FK_postknm_postkan FOREIGN KEY (POSTKANID) REFERENCES dbo.postkan(ID)
GO
ALTER TABLE dbo.subkan
ADD CONSTRAINT FK_subkan_postkan FOREIGN KEY (POSTKANID) REFERENCES dbo.postkan(ID)
GO
ALTER TABLE dbo.subkgem
ADD CONSTRAINT FK_sukbgem_subkan FOREIGN KEY (SUBKANID) REFERENCES dbo.subkan(ID)
GO
ALTER TABLE dbo.subkgem
ADD CONSTRAINT FK_subkgem_gem FOREIGN KEY (GEMID) REFERENCES dbo.gem(ID)
GO
ALTER TABLE dbo.straatnm
ADD CONSTRAINT FK_straatnm_gem FOREIGN KEY(GEMID) REFERENCES dbo.gem(ID)
GO
ALTER TABLE dbo.sstrstrn
ADD CONSTRAINT FK_sstrstrn_straatnm FOREIGN KEY (STRAATNMID) REFERENCES dbo.straatnm(ID)
GO
ALTER TABLE dbo.sstrstrn
ADD CONSTRAINT FK_sstrstrn_substr FOREIGN KEY (SUBSTRID) REFERENCES dbo.substr(ID)
GO
ALTER TABLE dbo.substrnm
ADD CONSTRAINT FK_substrnm_substr FOREIGN KEY (SUBSTRID) REFERENCES dbo.substr(ID)
GO
\ No newline at end of file
use crab
go
BEGIN TRY
DROP TABLE dbo.WoonplaatsWerktabel
END TRY
BEGIN CATCH
print 'Tabel dbo.WoonplaatsWerktabel bestond nog niet, dus was verwijderen niet nodig.'
END CATCH
GO
CREATE TABLE dbo.WoonplaatsWerktabel (
ID int identity(1,1),
CrabPostkantonID int,
Postnummer int,
Gemeente varchar(max),
Deelgemeente varchar(max),
Taalcode varchar(2)
)
GO
INSERT INTO dbo.WoonplaatsWerktabel(CrabPostkantonID, Postnummer, Gemeente, Deelgemeente, Taalcode)
SELECT
pk.ID
,pkancode AS Postnummer
, gemnm AS Gemeente
, REPLACE(REPLACE(postkannm, '»', ''), '«', '') AS Deelgemeente
, gn.Taalcode
FROM
dbo.gem g
inner join dbo.gemnm gn on g.ID = gn.gemid
inner join dbo.subkgem skg on g.id = skg.gemid
inner join dbo.subkan sk on skg.subkanid = sk.id
inner join dbo.postkan pk on sk.postkanid = pk.id
inner join dbo.postknm pkn on pk.id = pkn.postkanid
WHERE
gn.taalcode = pkn.taalcode
GO
DECLARE @input varchar(max)
, @idx int
, @entry varchar(max)
, @maxid int
, @tmp int
, @crabID int
, @postnr int
, @gemeente varchar(max)
, @taalcode varchar(2)
SELECT @maxid = max(ID)
FROM dbo.WoonplaatsWerktabel
WHERE Deelgemeente like '%/%'
WHILE @maxid IS NOT NULL
BEGIN
SELECT
@crabID = CrabPostkantonID
, @postnr = Postnummer
, @input = Deelgemeente
, @gemeente = gemeente
, @taalcode = taalcode
FROM
dbo.WoonplaatsWerktabel
WHERE
ID = @maxid
SET @idx = charindex('/', @input)
WHILE @idx > 0
BEGIN
SET @entry = substring(@input, 0, @idx)
INSERT INTO dbo.WoonplaatsWerktabel(CrabPostkantonID, Postnummer, Gemeente, Deelgemeente, Taalcode)
VALUES (@crabID, @postnr, @gemeente, rtrim(ltrim(@entry)), @taalcode)
SET @input = substring(@input, @idx + 1, len(@input))
SET @idx = charindex('/', @input)
END
UPDATE dbo.WoonplaatsWerktabel
SET Deelgemeente = @input
WHERE ID = @maxid
SELECT @maxid = max(ID)
FROM dbo.WoonplaatsWerktabel
WHERE Deelgemeente like '%/%'
END
GO
UPDATE dbo.WoonplaatsWerktabel
SET Deelgemeente = rtrim(ltrim(Deelgemeente))
GO
-- namen die we zelf toegevoegd hebben
INSERT INTO dbo.WoonplaatsWerktabel(CrabPostkantonID, Postnummer, Gemeente, Deelgemeente, Taalcode)
VALUES(938, 8340, 'Damme', 'Sint-Rita', 1)
INSERT INTO dbo.WoonplaatsWerktabel(CrabPostkantonID, Postnummer, Gemeente, Deelgemeente, Taalcode)
VALUES(938, 8340, 'Damme', 'Vivenkapelle', 1)
INSERT INTO dbo.WoonplaatsWerktabel(CrabPostkantonID, Postnummer, Gemeente, Deelgemeente, Taalcode)
VALUES(1133, 9940, 'Evergem', 'Wippelgem', 1)
INSERT INTO dbo.WoonplaatsWerktabel(CrabPostkantonID, Postnummer, Gemeente, Deelgemeente, Taalcode)
VALUES(960, 8530, 'Harelbeke', 'Stasegem', 1)
GO
-- gemeenten die we niet toegevoegd hebben, bv. omdat ze volgens Wikipedia een andere postcode hebben
-- en met die andere postcode ook al in de woonplaatsenlijst zitten
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 1348 AND Deelgemeente = 'Mont-Saint-Guibert'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 1380 AND Deelgemeente = 'Waterloo'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 1400 AND Deelgemeente = 'Petit-Roeulx-lez-Nivelles'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 1410 AND Deelgemeente = 'La Hulpe'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 2180 AND Deelgemeente = 'Antwerpen'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 2620 AND Deelgemeente = 'Wilrijk (Antwerpen)'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 2990 AND Deelgemeente = 'Brecht'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 3660 AND Deelgemeente = 'Meeuwen-Gruitrode'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 4000 AND Deelgemeente = 'Saint-Nicolas (Lg.)'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 4560 AND Deelgemeente = 'Modave'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 4671 AND Deelgemeente = 'Cheratte'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 4700 AND Deelgemeente = 'Waimes'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 4900 AND Deelgemeente = 'Theux'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 5350 AND Deelgemeente = 'Gesves'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 5575 AND Deelgemeente = 'Beauraing'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 6010 AND Deelgemeente = 'Montignies-sur-Sambre'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 6870 AND Deelgemeente = 'Bras'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 6920 AND Deelgemeente = 'Rochefort'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 7180 AND Deelgemeente = 'Ecaussinnes'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 8570 AND Deelgemeente = 'Wortegem-Petegem'
DELETE FROM dbo.WoonplaatsWerktabel WHERE Postnummer = 4750 AND Deelgemeente = 'Butgenbach' AND Taalcode = 'fr'
GO
-- aanpassingen
UPDATE dbo.WoonplaatsWerktabel SET Deelgemeente = 'Ekeren' WHERE Postnummer = 2180 AND Deelgemeente = 'Ekeren (Antwerpen)'
UPDATE dbo.WoonplaatsWerktabel SET Deelgemeente = 'Kermt' WHERE Postnummer = 3510 AND Deelgemeente = 'Kermt (Hasselt)'
UPDATE dbo.WoonplaatsWerktabel SET Deelgemeente = '''s-Gravenvoeren' WHERE Postnummer = 3798 AND Deelgemeente = 's Gravenvoeren'
UPDATE dbo.WoonplaatsWerktabel SET Deelgemeente = 'Beveren-Leie' WHERE Postnummer = 8791 AND Deelgemeente = 'Beveren (Leie)'
UPDATE dbo.WoonplaatsWerktabel SET Deelgemeente = 'Erembodegem' WHERE Postnummer = 9320 AND Deelgemeente = 'Erembodegem (Aalst)'
GO
use crab
go
-- En nu kunnen we nakijken wat er aangepast of toegevoegd is.
-- Als er in het eerste zoekresultaat meerdere rijen zijn waar quotes in voorkomen die op << en >> lijken,
-- moet je in '00 woonplaatsen bijwerken.sql' eens controleren of dat zo in de REPLACE-instructie staat bij de inserts.
-- Niet alle teksteditors kunnen met die quotes overweg, dus misschien moet je dat eens aanpassen en opnieuw uitvoeren.
SELECT *
FROM dbo.WoonplaatsWerktabel wwt
LEFT OUTER JOIN gap_local.adr.WoonPlaats wp on wwt.Postnummer = wp.Postnummer and wwt.Deelgemeente = wp.Naam
WHERE wp.Naam is null
ORDER BY wwt.CrabPostkantonID
GO
SELECT * FROM gap_local.adr.WoonPlaats wp
LEFT OUTER JOIN dbo.WoonplaatsWerktabel wwt on wwt.Postnummer = wp.Postnummer and wwt.Deelgemeente = wp.Naam
WHERE wwt.Deelgemeente is null
ORDER BY wwt.CrabPostKantonID
GO
use crab
go
BEGIN TRY
DROP TABLE dbo.StraatnaamWerktabel
END TRY
BEGIN CATCH
print 'Tabel dbo.StraatnaamWerktabel bestond nog niet, dus was verwijderen niet nodig.'
END CATCH
GO
CREATE TABLE dbo.StraatnaamWerktabel (
ID int identity(1,1),
CrabSubstraatID int,
Postnummer int,
SubStraatnaam varchar(80),
CleaneSubstraatnaam varchar(80),
Taalcode varchar(2)
)
GO
INSERT INTO dbo.StraatnaamWerktabel(CrabSubstraatID, Postnummer, SubStraatnaam, CleaneSubStraatnaam, TaalCode)
SELECT DISTINCT
s.ID AS CrabSubStrID
, pkancode
, substrnm
, straatnm0
, ss.Taalcode
FROM
straatnm sn
inner join sstrstrn ssn on sn.id = ssn.straatnmid
inner join substr s on ssn.substrid = s.id
inner join substrnm ss on s.id = ss.substrid
inner join gem g on sn.gemid = g.id
inner join gemnm gn on g.id = gn.gemid
inner join subkgem skg on g.id = skg.gemid
inner join subkan sk on skg.subkanid = sk.id
inner join postkan pk on pk.id = sk.postkanid
inner join postknm pkn on pk.id = pkn.postkanid
WHERE
pkn.TAALCODE = g.TAALCODE
and s.subkanid = sk.id
GO
use crab
go
-- Cleanup CRAB-crap
-- DROP TABLE dbo.AanvullingStraatnaam
CREATE TABLE dbo.AanvullingStraatnaam (
ID int identity(1,1),
CrabSubstraatID int,
Postnummer int,
SubStraatnaam varchar(max),
CleaneSubStraatnaam varchar(max),
Straatnaam varchar(max),
Taalcode varchar(2)
)
-- Aanvullingen sinds eerste inserts en latere CRAB-aanvullingen
INSERT INTO dbo.AanvullingStraatnaam(CrabSubstraatID, Postnummer, SubStraatnaam, CleaneSubStraatnaam, Taalcode)
SELECT CrabSubstraatID, Postnummer, SubStraatnaam, CleaneSubStraatnaam, Taalcode
FROM dbo.StraatnaamWerktabel WHERE CrabSubstraatid > 190969 -- dat is de max(crabsubstraatid) van de laatste CRAB-aanvulling
-- Autostrades, parkings, metrohaltes en luchthavens moeten we niet toevoegen. Van ronde punten zijn we het niet zeker.
-- Kijk eerst na of je niets te veel zou verwijderen en voer dan de delete-query uit.
SELECT * -- DELETE
FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like '%Autostrade%' OR CleaneSubStraatnaam like '%Autostrade%')
OR (substraatnaam like '%Autoroute%' OR CleaneSubStraatnaam like '%Autoroute%')
OR (substraatnaam like '%Autosnelweg%' OR CleaneSubStraatnaam like '%Autosnelweg%')
OR (substraatnaam like '%parking%' OR CleaneSubStraatnaam like '%parking%')
OR (substraatnaam like 'RN %' OR CleaneSubStraatnaam like 'RN %')
OR (substraatnaam like 'Route nationale%' OR CleaneSubStraatnaam like 'Route nationale%')
OR (substraatnaam like '%nijverheidszone%' OR CleaneSubStraatnaam like '%nijverheidszone%')
OR (substraatnaam like '%bedrijvenpark%' OR CleaneSubStraatnaam like '%bedrijvenpark%')
OR (substraatnaam like '%industrieterrein%' OR CleaneSubStraatnaam like '%industrieterrein%')
OR (substraatnaam like '%KMO-zone%' OR CleaneSubStraatnaam like '%KMO-zone%')
OR (substraatnaam like '%ambachtelijke zone%' OR CleaneSubStraatnaam like '%ambachtelijke zone%')
OR (substraatnaam like 'zoning industriel%' OR CleaneSubStraatnaam like 'zoning industriel%')
OR (substraatnaam like 'parc industriel%' OR CleaneSubStraatnaam like 'parc industriel%') -- opm: rue du parc industriel mag wel blijven
OR (substraatnaam like 'centre commercial %' OR CleaneSubStraatnaam like 'centre commercial %')
OR (substraatnaam like 'luchthaven %' OR CleaneSubStraatnaam like 'luchthaven %')
OR (substraatnaam like '%airport%' OR CleaneSubStraatnaam like '%airport%')
OR (substraatnaam like 'Aroport %' OR CleaneSubStraatnaam like 'Aroport %')
OR (substraatnaam like 'Base Arienne %' OR CleaneSubStraatnaam like 'Base Arienne %')
OR (substraatnaam like 'Arodrome %' OR CleaneSubStraatnaam like 'Arodrome %')
OR (substraatnaam like 'metro%' OR CleaneSubStraatnaam like 'metro%')
OR (substraatnaam like 'mtro%' OR CleaneSubStraatnaam like 'mtro%')
OR (substraatnaam like 'fashion gardens%' OR CleaneSubStraatnaam like 'fashion gardens%')
OR (substraatnaam like '%design center%' OR CleaneSubStraatnaam like '%design center%')
OR (substraatnaam like 'Metereologisch station%' OR CleaneSubStraatnaam like 'Metereologisch station%')
OR (substraatnaam like '%radarstation%' OR CleaneSubStraatnaam like '%radarstation%')
OR (LEN(CLeaneSubStraatnaam) <=3 AND LEFT(CleaneSubStraatnaam, 1) IN ('A', 'E') AND RIGHT(CleaneSubStraatnaam, 1) IN ('0','1','2','3','4','5','6','7','8','9')) -- autostrades
-- Wat volgt, zijn straatnamen die waarschijnlijk opgeruimd moeten worden. Plak Bijvoorbeeld de resultaten in Excel,
-- en gebruik een formule om zo de update-queries samen te stellen. Die moeten verderop (of in een apart venster)
-- geplakt en uitgevoerd worden. In kolom E moet je de straatnamen verbeteren, dat kan (o.a.) met Zoeken en Vervangen.
/*
Excel-formule (gelijk-aan-teken mee kopiren, de comment-streepjes en de spatie niet!):
=TEKST.SAMENV("UPDATE dbo.AanvullingStraatnaam SET Straatnaam = '";SUBSTITUEREN(TEKST.SAMENV(HOOFDLETTERS(LINKS(E1;1));RECHTS(E1;LENGTE(E1)-1));"'";"''");"' WHERE ID = ";A1)
Zorgt voor het volgende:
- TEKST.SAMENV: vult alle celwaarden in in de query
- SUBSTITUEREN: verdubbelt weglatingstekens, anders interpreteert SQL Server ze als quotes ipv string-input
- TEKST.SAMENV+HOOFDLETTERS+LINKS/RECHTS: de eerste letter van de straatnaam moet altijd een hoofdletter zijn
*/
-- Afkortingen die we (nog) niet nakijken of voluit schrijven: Dr., Mr.
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'Ij%' OR CleaneSubStraatnaam like 'Ij%') -- Ij moet IJ worden
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'av %' OR cleanesubstraatnaam like 'av %') -- Avenue
AND Straatnaam IS NULL -- vanaf hier slaan we over wat we al verbeterd hebben
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'Boulev.%' OR cleanesubstraatnaam like 'Boulev.%') -- Boulevard
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'R.%' OR cleanesubstraatnaam like 'R.%') -- waarschijnlijk Rue of Route, maar kan ook initiaal zijn
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'Ch.%' OR cleanesubstraatnaam like 'Ch.%' OR substraatnaam like 'Ch %' or cleanesubstraatnaam like 'Ch %') -- waarschijnlijk Chemin, maar kan ook initiaal zijn
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'Mgr%' OR cleanesubstraatnaam like 'Mgr%') -- monseigneur
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like '%str.' OR cleanesubstraatnaam like '%str.') -- straat
AND Straatnaam IS NULL -- vanaf hier slaan we over wat we al verbeterd hebben
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'Burg.%' OR cleanesubstraatnaam like 'Burg.%') -- burgemeester
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'Lt.%' OR cleanesubstraatnaam like 'Lt.%') -- Luitenant
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'Kapt.%' OR cleanesubstraatnaam like 'Kapt.%') -- Kapitein
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'Gebr.%' OR cleanesubstraatnaam like 'Gebr.%') -- Gebroeders
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'Prof.%' OR cleanesubstraatnaam like 'Prof.%') -- Professor
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like '%stwg%' OR cleanesubstraatnaam like '%stwg%') -- steenweg
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'st.%' OR cleanesubstraatnaam like 'st.%') -- de sint-dingesstraten
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like 'ste.%' OR cleanesubstraatnaam like 'ste.%') -- ook sint-dingesstraten, maar dan vrouwelijk en in het Frans
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like '%.%' OR cleanesubstraatnaam like '%.%') -- andere afkortingen, soms ontbrekende spaties, enz.
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
SELECT * FROM dbo.AanvullingStraatnaam
WHERE (substraatnaam like '%(%' OR cleanesubstraatnaam like '%(%') -- voornaam staat er achteraan bij of toevoeging met gemeente/provincie
AND Straatnaam IS NULL
ORDER BY taalcode, postnummer, substraatnaam
-- Nu hebben we een hoop updates voor straatnamen die nog opgeruimd moesten worden. Voer die eerst uit,
-- en overloop dan de records waar nog niets ingevuld is bij Straatnaam. Gebruik ook weer dat Excel-blad
-- om de update-queries te genereren.
-- Ruimte om opruim-updates te plakken en uit te voeren, per opzoeking
-- Laatste controles. Normaal blijft er nog veel over, maar hier zou voor het Nederlands CleaneSubStraatnaam altijd goed moeten zijn.
-- Kijk wel nog eens na op hoofdlettergebruik (ALL CAPS verbeteren, bv.).
SELECT * FROM dbo.AanvullingStraatnaam
WHERE Straatnaam IS NULL AND Taalcode = 'nl'
ORDER BY taalcode, postnummer, substraatnaam
-- Bij de Duitstalige dorpen staat er bij CleaneSubStraatnaam dikwijls enkel de naam van het gehucht (vnl. postnummers 4790 en 4791).
-- Om die gemeenten makkelijk aan te passen, kun je een extra formule gebruiken.
/*
Kolom Q (verwijdert gehuchtnaam, komma en trailing space - kolomnaam is belangrijk voor volgende formule):
=SPATIES.WISSEN(SUBSTITUEREN(SUBSTITUEREN(D1;E1;"");",";""))
Formule om uiteindelijke query te maken:
=TEKST.SAMENV("UPDATE dbo.AanvullingStraatnaam SET Straatnaam = '";SUBSTITUEREN(TEKST.SAMENV(HOOFDLETTERS(LINKS(Q1;1));RECHTS(Q1;LENGTE(Q1)-1));"'";"''");"' WHERE ID = ";A1)
*/
-- Kijk ook nog eens na op hoofdlettergebruik (ALL CAPS verbeteren, bv.).
SELECT * FROM dbo.AanvullingStraatnaam
WHERE Straatnaam IS NULL AND Taalcode = 'de'
ORDER BY taalcode, postnummer, substraatnaam
-- Bij Franstalige gemeenten staat bij CleaneSubStraatnaam soms de Nederlandse versie. Dat moet dus zeker aangepast worden.
-- Hier krijg je ook soms klinkers met accenten die fout omgezet zijn in SubStraatnaam (maar juist in CleaneSubStraatnaam),
-- en net als bij de Duitstalige gehuchten opnieuw versies met de gehuchtnaam erbij.
-- In Excel kun je voorwaardelijke opmaak gebruiken om komma's en op te sporen.
-- Kijk ook nog eens na op hoofdlettergebruik (ALL CAPS verbeteren, bv.).
SELECT * FROM dbo.AanvullingStraatnaam
WHERE Straatnaam IS NULL AND Taalcode = 'fr'
ORDER BY taalcode, postnummer, substraatnaam
-- Ruimte om de laatste updates te plakken en uit te voeren, per opzoeking
-- Verwijder nu alle straatnamen die al in de dev-database zitten.
SELECT * -- DELETE FROM dbo.AanvullingStraatnaam
FROM dbo.AanvullingStraatnaam asn
LEFT JOIN gap_local.adr.Straatnaam sn ON asn.postnummer = sn.postnummer AND asn.Straatnaam = sn.Naam
WHERE sn.Naam IS NOT NULL
-- Maak nu de insert-queries voor de git-repository.
SELECT DISTINCT CrabSubstraatID, Postnummer, Straatnaam, CASE Taalcode WHEN 'nl' THEN 1 WHEN 'fr' THEN 2 WHEN 'de' THEN 3 END AS TaalID
FROM dbo.AanvullingStraatnaam
ORDER BY CrabSubstraatID
/*
Excel-formule (zet in kolom F de StraatNaamID voor de identity inserts, te beginnen bij MAX(CrabSubstraatID)+1 -- zie bovenaan):
=TEKST.SAMENV("INSERT INTO gap_local.adr.StraatNaam(StraatnaamID, CrabSubstraatID, Postnummer, Naam, TaalID) VALUES(";F1;", ";A1;", ";B1;", '";SUBSTITUEREN(C1;"'";"''");"', ";D1;")")
*/
-- Inserts
use gap_local
go
SET IDENTITY_INSERT [adr].[StraatNaam] OFF
-- hier invoegen :)
SET IDENTITY_INSERT [adr].[StraatNaam] OFF
-- Controle: zijn er dubbels gentroduceerd?
-- (Van waar komen die dubbels? Slordige input, verschillende versies van dezelfde naam, typfouten, een 'anderstalige' versie die hetzelfde is als de officile, enz.)
SELECT CrabSubstraatID, Postnummer, Naam, TaalID FROM gap_local.adr.StraatNaam
GROUP BY CrabSubstraatID, Postnummer, Naam, TaalID
HAVING COUNT(CrabSubstraatID) > 1
ORDER BY CrabSubstraatID
use crab
go
-- En nu kunnen we nakijken wat er aangepast of toegevoegd is.
-- aanvullingen sinds eerste inserts
SELECT * FROM dbo.straatnaamwerktabel WHERE crabsubstraatid > 153602
-- aanvullingen sinds laatste inserts (2018)
SELECT * FROM dbo.straatnaamwerktabel WHERE crabsubstraatid > 190969
-- Als er in het eerste zoekresultaat hieronder meerdere rijen zijn waar quotes in voorkomen die op << en >> lijken,
-- moet je in '00 woonplaatsen bijwerken.sql' eens controleren of dat zo in de REPLACE-instructie staat bij de inserts.
-- Niet alle teksteditors kunnen met die quotes overweg, dus misschien moet je dat eens aanpassen en opnieuw uitvoeren.
SELECT *
FROM dbo.StraatnaamWerktabel snwt
LEFT OUTER JOIN gap_local.adr.StraatNaam sn on snwt.Postnummer = sn.Postnummer and (snwt.SubStraatnaam = sn.Naam or snwt.CleaneSubstraatnaam = sn.Naam)
WHERE sn.Naam is null
ORDER BY sn.CrabSubstraatID
GO
-- manuele toevoegingen aan de stratenlijst (die eventueel nog gematcht moeten worden)
-- OPM: die moet je nog uit de live-database ophalen!
SELECT * FROM gap_local.adr.StraatNaam sn
LEFT OUTER JOIN dbo.StraatnaamWerktabel snwt on snwt.Postnummer = sn.Postnummer and (snwt.SubStraatnaam = sn.Naam or snwt.CleaneSubstraatnaam = sn.Naam)
WHERE snwt.CleaneSubstraatnaam IS NULL
AND sn.CrabSubstraatID IS NULL
ORDER BY snwt.CrabSubstraatID
GO
-- straatnamen die uit CRAB komen maar waar cleanup aan gebeurd is,
-- bv. door afkortingen voluit te schrijven of toevoegingen tussen haakjes te verwijderen
SELECT * FROM gap_local.adr.StraatNaam sn
LEFT OUTER JOIN dbo.StraatnaamWerktabel snwt on snwt.Postnummer = sn.Postnummer and (snwt.SubStraatnaam = sn.Naam or snwt.CleaneSubstraatnaam = sn.Naam)
WHERE snwt.CleaneSubstraatnaam IS NULL
AND sn.CrabSubstraatID IS NOT NULL
ORDER BY snwt.CrabSubstraatID
GO
--ALTER TABLE [adr].[BelgischAdres] DROP CONSTRAINT [FK_BelgischAdres_StraatNaam]
--GO
--ALTER TABLE [adr].[BelgischAdres] DROP CONSTRAINT [FK_BelgischAdres_Adres]
--GO
--ALTER TABLE [adr].[BelgischAdres] DROP CONSTRAINT [FK_BelgischAdres_WoonPlaats]
--GO
--delete from gap_local.adr.straatnaam where crabsubstraatid is null
--GO
--ALTER TABLE [adr].[BelgischAdres] WITH CHECK ADD CONSTRAINT [FK_BelgischAdres_StraatNaam] FOREIGN KEY([StraatNaamID])
--REFERENCES [adr].[StraatNaam] ([StraatNaamID])
--GO
--ALTER TABLE [adr].[BelgischAdres] CHECK CONSTRAINT [FK_BelgischAdres_StraatNaam]
--GO
--ALTER TABLE [adr].[BelgischAdres] WITH CHECK ADD CONSTRAINT [FK_BelgischAdres_Adres] FOREIGN KEY([BelgischAdresID])
--REFERENCES [adr].[Adres] ([AdresID])
--GO
--ALTER TABLE [adr].[BelgischAdres] CHECK CONSTRAINT [FK_BelgischAdres_Adres]
--GO
--ALTER TABLE [adr].[BelgischAdres] WITH CHECK ADD CONSTRAINT [FK_BelgischAdres_WoonPlaats] FOREIGN KEY([WoonPlaatsID])
--REFERENCES [adr].[WoonPlaats] ([WoonPlaatsID])
--GO
--ALTER TABLE [adr].[BelgischAdres] CHECK CONSTRAINT [FK_BelgischAdres_WoonPlaats]
--GO
Je kunt de CRAB-database gratis downloaden op https://download.vlaanderen.be/Producten/Detail?id=72&title=CRAB_stratenlijst.
Exporteer de tabellen uit het Access-bestand naar een SQL Server-database. Voer daarna de scripts in dit mapje uit, in de juiste volgorde (zie volgnummer in de bestandsnaam). De scripts voeren een aantal opruimbewerkingen uit, en zorgen er zo voor dat je de gegevens in die tabellen kunt vergelijken met de woonplaatsen- en stratenlijst uit je lokale GAP-database. Als die niet 'gap_local' heet, moet je dat nog aanpassen in de controlescripts voor je ze runt.
- 00 create-db.sql
- Open het Access-bestand en exporteer de tabellen naar de lokale database 'crab'.
- Voer nu de overige scripts uit, volgens nummering.
Je zal onder andere heel wat straatnamen moeten verbeteren. Zo wordt 'Sint' soms afgekort, soms staat er een koppelteken achter en soms een spatie of enkel een punt, enz.
Als je helemaal klaar bent, kun je de rijen ophalen uit de werktabellen die nog niet in de dev-database zitten. Op basis van dat resultaat kan je dan de nieuwe insert-queries genereren.
\ No newline at end of file
Voer achtereenvolgens uit:
* gap-testdata.sql
* gap-straten.sql
* gap-straten aanvulling vanuit CRAB 2018.sql
* gap-procedures.sql
* 01 create-db.sql
* 02 gap-testdata.sql
* 03 gap-straten.sql
* 04 gap-straten aanvulling vanuit CRAB 2018.sql
* 05 gap-procedures.sql
Dan zouden we al ergens moeten komen :-)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment