Úvod do SQL v systému SAS Martin Branda Tabulka vp_klient: klient_id jmeno prijmeni datnar adresa mesto pohlavi 1 Jana Nováková 01Mar1952 Hradecká 101 Praha Z 2 Josef Novotný 22Jan1980 Zámecká 25 Brno M 3 Karel Boží 14Sep1975 ČS armády 857 Lhota M 4 Martina Nováčková 11Jul1942 Náměstí TGM 5 Lhotka Z 5 Jan Berdych 26Jun1965 Počátecká 21 Olomouc M 6 Stanislav Bozetický 01Nov2000 Liberecká 11 Lichkov M 7 Ivana Karlová 07Oct1966 Wilsonova 6 Praha Z 8 Stela Zázvorová 05May1949 Sloužilova 6 Plzeň Z 9 Jiřina Bohdálková 08Jul1969 Krylova 333 Mladá Boleslav Z 10 Vladislav Horák 28Dec1975 Holická 54 Vysoké Mýto M Tabulka vp_smlouva: smlo_id odvetvi datpoc datkon klient_id 1 POV 01Jan2010 01Jan2012 1 2 MAJ 02Feb2012 1 3 POV 05Mar2009 2 4 ZIV 06Jun2009 06Jun2011 3 5 ZIV 03Mar2009 3 6 ZIV 18Jun2011 18Oct2011 3 7 POV 01Nov2010 4 8 ZIV 02Dec2012 4 9 POV 15Mar2009 15Mar2011 5 10 ZIV 16Jun2009 5 11 MAJ 03Mar2009 03Mar2011 5 12 MAJ 18Dec2011 6 13 POV 01Dec2010 01Dec2011 7 14 ZIV 02Sep2011 7 15 ZIV 05Aug2009 8 16 POV 06Jun2009 06Jun2011 8 17 MAJ 03Mar2009 9 18 MAJ 18Jun2011 18Mar2012 9 19 POV 01Jan2010 9 20 POV 02Feb2012 10 Tabulka vp_skody: skoda_id datum vyplaceno rezerva smlo_id 1 03May2011 20500 0 1 2 07Aug2010 12800 5000000 3 3 08Sep2010 1250 0 4 4 02Mar2011 120850 20000 11 5 30Nov2011 55600 0 13
6 02Mar2011 44100 10000 16 7 23Jul2011 200300 0 17 8 04May2011 45200 11000 1 9 15Mar2012 0 50000 20 /* Výběr některých sloupců */ create table smlouva_sloupce as select smlo_id, klient_id, odvetvi from sasuser.vp_smlouva; /* pouze vystup, nevytvori tabulku */ select smlo_id, klient_id, odvetvi from sasuser.vp_smlouva; /* Výběr některých sloupců */ create table klient_sloupce as select jmeno, prijmeni, datnar from sasuser.vp_klient; /* Výběr řádků podle kritérií */ create table smlouva_radky as select * from sasuser.vp_smlouva where odvetvi = "MAJ"; /* Výběr řádků podle kritérií */ create table smlouva_radky2 as select * from sasuser.vp_smlouva where odvetvi in ("POV","MAJ"); /* Spojení dvou tabulek */ create table klient_smlouva as select a.*, b.smlo_id, b.odvetvi ;
/* Počet smluv klienta - SPATNE */ create table pocet_smluv as select klient_id, jmeno, prijmeni, count(smlo_id) as pocet_smluv from klient_smlouva; /* Počet smluv klienta */ create table pocet_smluv as select klient_id, jmeno, prijmeni, count(smlo_id) as pocet_smluv from klient_smlouva group by klient_id order by pocet_smluv desc; /* Počet smluv klienta - LEPE */ create table pocet_smluv as select DISTINCT klient_id, jmeno, prijmeni, count(smlo_id) as pocet_smluv from klient_smlouva group by klient_id order by pocet_smluv desc; /* pocet smluv klienta v jednom kodu */ create table pocet_smluv2 as select a.klient_id, count(b.smlo_id) as pocet_smluv /* 1. napojte skody na smlouvy */ create table smlouva_skody as select a.*, b.* on (a.smlo_id = b.smlo_id); /* 2. spoctete pocet skod na smlouve */ create table smlouva_skody_pocet as select a.smlo_id, count(b.skoda_id) as pocet_skod
on (a.smlo_id = b.smlo_id) group by a.smlo_id; /* prvni smlouva klienta (smlouva s nejmensim datem pocatku) */ create table prvni_smlouva as select a.klient_id, a.prijmeni, b.smlo_id, b.datpoc group by a.klient_id having b.datpoc = min(b.datpoc); /* ukol - posledni skoda na smlouve */ create table smlouva_posledni_skoda as select a.smlo_id, b.skoda_id, b.datum on (a.smlo_id = b.smlo_id) group by a.smlo_id having b.datum = max(b.datum); /* pocet POV smluv klienta v jednom kodu - NE ZCELA DOBRE */ create table pocet_smluv3 as select a.klient_id,a.prijmeni, count(b.smlo_id) as pocet_smluv where b.odvetvi = "POV" /* pocet POV smluv klienta v jednom kodu */ create table pocet_smluv_pov as select a.klient_id, a.prijmeni, count(b.smlo_id) as pocet_smluv on (a.klient_id = b.klient_id and b.odvetvi = "POV")
/* UKOL: vsechny smlouvy a pocty skod s nenulovou rezervou a celkova vyse rezervy :P */ create table smlouva_rezerva as select a.smlo_id, count(b.skoda_id) as pocet, sum(b.rezerva) as rezerva on (a.smlo_id = b.smlo_id and b.rezerva > 0) group by a.smlo_id; /* pocet skod na smlouve po datu */ create table smlouva_pocet_skod_pd as select a.smlo_id, count(b.skoda_id) as pocet_skod on (a.smlo_id = b.smlo_id and b.datum > mdy(6,30,2010)) group by a.smlo_id; /* skody klienta - musime prejit pres smlouvu */ create table klient_skody as select a.klient_id, c.skoda_id left join sasuser.vp_skody c on (b.smlo_id = c.smlo_id) where c.skoda_id is not missing; /* celkove plneni na klienta v roce 2011 */ create table klient_skody_plneni2011 as select distinct a.klient_id, (case when sum(c.vyplaceno) =. then 0 else sum(c.vyplaceno) end) as plneni2011 left join sasuser.vp_skody c on (b.smlo_id = c.smlo_id and year(c.datum) = 2011)
DATA Step /* smlouvy POV */ data work.smlouvy_pov; set sasuser.vp_smlouva; if odvetvi = "POV"; /* ruzne vypocty v radcich */ data plnrez(drop = vyplaceno rezerva); set sasuser.vp_skody; plnrez = vyplaceno + rezerva; den_vzniku = day(datum); mesic_vzniku = month(datum); rok_vzniku = year(datum); /* spojeni dvou tabulek - NE ZCELA DOBRE */ /* POZOR - tabulky musi byt setridene podle klice!!! */ data klient_smlouva; merge sasuser.vp_klient sasuser.vp_smlouva; by klient_id; /* spojeni dvou tabulek - left join - pomoci In */ data klient_smlouva; merge sasuser.vp_klient(in = ink) sasuser.vp_smlouva; by klient_id; if ink;