Search

onze sponsors

microsoft_logo.gif


 

computrain_logo.JPG

Forum Login | Register
   Forum

 

Subject: Hulp gevraagd bij query
Prev Next
You are not authorized to post a reply.

Author Messages
Ruud BootsUser is Offline

Posts:62

02-06-2010 18:35:59 Alert 

Voor het vullen van een SCD (slowly changing dimension) TYPE 2 tabel voor persoonsgegevens 

heb ik de volgende brongegevens beschikbaar:
 
 
pers_nr dienstverb. funct.code begin_datum eind_datum
3031 NULL 790 1985-04-01 2002-12-31 
3031 VDV NULL 1985-04-01 2007-12-31 
3031 NULL 414 2003-01-01 2007-02-28 
3031 NULL 488 2007-03-01 2007-12-31 
3031 NULL 823 2008-01-01 NULL
3031 VST NULL 2008-01-01 NULL
etc....
 
Het resultaat van de query om de dim_persoon tabel te vullen moet worden:
 
pers_nr dienstverb. funct.code SCD_startdate SCD_enddate
3031 VDV 790 1985-04-01 2002-12-31
3031 VDV 414 2003-01-01 2007-02-28
3031 VDV 488 2007-03-01 2007-12-31
3031 VST 823 2008-01-01 NULL
 
zodat voor elke beschikbare periode de juiste attributen gezet worden. 
 
Iemand een  suggestie?
Robert HartskeerlUser is Offline

Posts:86

02-06-2010 21:58:01 Alert 
Ruud,
zit er enige logica in het vullen van de 2e en 3e kolom. Wanneer zet je bijvoorbeeld VDV en wanneer VST in het voorbeeld. Ik zie dat dit de NULL waarden vervangt maar de vraag is waarom juist die regel.
Ook hebben de eerste en tweede regel een andere datum en gebruik je de laaste (oudste).

Kortom, zijn er nog wat aanvullende regels waar rekening mee gehouden moet worden of waar juist voordeel mee gedaan kan worden (oplopende datum van de 4e kolom?).

Robert
Ruud BootsUser is Offline

Posts:62

02-06-2010 22:15:35 Alert 

 Hoi Robert,

Hierbij wat aanvullende info:

 

De brongegevens zijn het resultaat van een union op basis van de volgende queries:

 

select pers_nr, rubriek_waarde as dienstverb,  null as [funct.code],  begin_datum,  eind_datum

  from  brontabel

where rubriekcode = 'P01102' 

and rel.pers_nr = '3031'

  order by 4 

 

pers_nr dienstverb funct.code begin_datum eind_datum

3031 VDV NULL 1985-04-01 2008-01-01 

3031 VST NULL 2008-01-01 NULL

 

select pers_nr, null as dienstverb, rubriek_waarde as [funct.code], begin_datum, eind_datum

  from  brontabel

where rubriekcode = 'P01106' 

and rel.pers_nr = '3031'

  order by 4 

pers_nr dienstverb funct.code begin_datum eind_datum

3031 NULL 790 1985-04-01 2003-01-01 

3031 NULL 414 2003-01-01 2007-03-01 

3031 NULL 488 2007-03-01 2008-01-01 

3031 NULL 823 2008-01-01 NULL

 

Robert HartskeerlUser is Offline

Posts:86

04-06-2010 14:57:54 Alert 

Ruud,

onderstaand script levert aan de hand van jouw voorbeeld het gewenste resultaat. Ik hoop dat dat je de juiste richting is voor je. Lees voor de tijdelijke tabel je eigen tabel. Ivm met de NULL waarden zijn het twee queries middels een UNION tot een resultaat.

create table #t (
    pers_nr        int not null,
    dienstverb  varchar(5) null,
    fcode        int null,
    begindatum    smalldatetime not null,
    einddatum    smalldatetime null
    );
   
insert into #t values
(3031, NULL, 790, '1985-04-01', '2002-12-31'),
(3031, 'VDV', NULL, '1985-04-01', '2007-12-31'),
(3031, NULL, 414, '2003-01-01', '2007-02-28'),
(3031, NULL, 488, '2007-03-01', '2007-12-31'),
(3031, NULL, 823, '2008-01-01', NULL),
(3031, 'VST', NULL, '2008-01-01', NULL);

select t1.pers_nr, t2.dienstverb, t1.fcode, t1.begindatum, t1.einddatum from #t t1
inner join #t t2 on t1.begindatum >= t2.begindatum and t1.einddatum <= t2.einddatum
where t2.dienstverb is not null and t1.fcode is not null
union
select t1.pers_nr, t2.dienstverb, t1.fcode, t1.begindatum, t1.einddatum from #t t1
inner join #t t2 on t1.begindatum = t2.begindatum
where t1.einddatum is null and t2.einddatum is null and t2.dienstverb is not null and t1.fcode is not null

drop table #t;

Robert HartskeerlUser is Offline

Posts:86

04-06-2010 14:59:23 Alert 
Oh, en even een order by 4 toevoegen.
Ruud BootsUser is Offline

Posts:62

05-06-2010 19:17:35 Alert 
Super, bedankt Robert. Hier kan mee verder.

gr. Ruud
You are not authorized to post a reply.
Forums > Forums > Ontwikkelen > Hulp gevraagd bij query



ActiveForums 3.6
  
Copyright (c) 2012 PASS Nederland   Privacy Statement  Terms Of Use