Documente Academic
Documente Profesional
Documente Cultură
INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Ana Mara', 'Jimbolia', 'TM', '973-585-547-x', 13, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Tara Edgar', 'Jimbolia', 'TM', '973-487-547-x', 11, 15); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Meca Vasile', 'Jimbolia', 'TM', '973-585-547-x', 200, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Bec Lavinia', 'Deva', 'HD', '927-345-547-x', 100, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Werk Dacian', 'Deva', 'HD', '987-545-532-x', 400, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Miodrag Ana', 'Hunedoara', 'HD', '978-534-523-x', 500, 45); INSERT INTO vanzari_carti (nrfact, datafact, client, loc, jud, isbn, cantit, pretun) values (123456,date'2008-03-03', 'Varga Teo', 'Hunedoara', 'HD', '922-123-549-x', 250, 45); Update vanzari_carti set valtotala=cantit*pretun;
ROLLUP
Prima funcie luat n discuie este ROLLUP. Se folosete pentru analiza datelor pe o singur dimensiune, dar la mai multe nivele de detaliere, atunci cnd n rapoarte sunt necesare subtotaluri incluse n alte subtotaluri, precum i un total general. ROLLUP este echivalentul opiunii SUBTOTALS din Excel i permite afiarea subtotalurilor, a unor funcii aplicate p e grupe de valori. Problema creia vrem s-i dm rspuns se formuleaz astfel: Care este totalul vnzrilor de carte, pe clieni, localiti i judee, precum i totalul general? Astfel de analize sunt ct se poate de frecvente i necesare pentru toate tipurile de firme. n lipsa unui operator de genul ROLLUP, soluia necesit reuniunea (UNION). Subtotaluri obinute prin reuniune: Grupare dup jude, localitate i client, calcul valoare total pe client:
SELECT jud, loc, client, SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY jud, loc, client ;
Total general:
SELECT ' ', 'TOTAL GENERAL ', ' ', SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti ;
March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR Realizarea subtotalurilor cu ajutorul operatorului UNION:
SELECT jud, loc, client, SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY jud, loc, client UNION SELECT jud, loc, ' Subtotal LOCALITATE ' ||loc, SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY jud, loc UNION SELECT jud, ' Subtotal JUDET '||jud, ' ', SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY jud UNION SELECT ' ', 'TOTAL GENERAL ', ' ', SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti ;
Cu operatorul ROLLUP asemenea operaiuni devin mult mai simple: 5 Introducere n OLAP ROLLUP, GROUPING | IE, an III
March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR Afiarea totalurilor la nivel de localitate i jude:
SELECT jud, loc, SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY ROLLUP(jud, loc) ;
Afiarea totalurilor la nivel de localitate, jude i client: SELECT jud, loc, client, SUM(ValTotala) AS Val_Vanzari FROM vanzari_carti GROUP BY ROLLUP(jud, loc, client) ;
March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR Se calculeaz valoarea funciei SUM pentru atributul cel mai din dreapta al ROLLUP -ului Client (acesta se consider a fi primul subtotal), apoi cte un subtotal pentru Loc, pentru Jud i, n final, totalul general. n total sunt 3 + 1 = 4 nivele de (sub)totalizare, 3 pentru cele trei atribute plus totalul general. n cazul operatorului ROLLUP, un singur argument va determina calculul i afiarea unui total general. Dac se utilizeaz dou argumente, primul calculeaz totalul general iar al doilea calculeaz i afieaz un subtotal pentru fiecare valoare distinct a cmpului an. n cazul utilizrii a trei argumente, primul determina calcularea unui total general (Grand Total), al doilea calculeaz media pentru fiecare valoare distinct a cmpului an, iar al treilea efectueaz un subtotal pentru fiecare combinaie (an, grup).
ROLLUP-uri pariale
Este necesar uneori ca subtotalizarea atributelor de grupare s fie parial: fie nu intereseaz totalul general, fie subtotalizarea este necesar numai pentru anumite atribute sau grupuri de atribute. Din datele existente n tabela VANZARI_CARTI se dorete gruparea pe judee, localiti, clieni, dar i pe cri (ISBN-uri). Subtotalul, ns, trebuie calculat numai la nivel client i localitate. SELECT NVL(jud,' ') AS Judet, CASE WHEN GROUPING(jud)=1 THEN 'total general ' ELSE CASE WHEN GROUPING(loc)=1 THEN 'Subtotal-judet'||jud ELSE loc END END AS localitate, CASE WHEN GROUPING(loc)=1 THEN ' ' ELSE CASE WHEN GROUPING(client) =1 THEN ' Subtotal loc. '||loc ELSE client END END AS Client, CASE WHEN GROUPING(client)=1 THEN ' ' ELSE CASE WHEN GROUPING (ISBN)=1 THEN ' Subtotal -clientul '||client ELSE isbn END END AS ISBN, SUM(ValTotala) AS Vanzari FROM VANZARI_CARTI GROUP BY jud, loc, ROLLUP(client,isbn) ;
March 6, 2013 SISTEME INFORMATICE PENTRU ASISTAREA DECIZIILOR Fiecare prestator de servicii se identific printr-un cod unic, denumire, numrul de telefon, categoria din care se ncadreaz (compania aerian, firm de transport terestru, unitate cazare). Pentru serviciile prestate, agenia ncheie un contract de care pot beneficia mai muli turiti (de exemplu, o familie). n cadrul contractului, pe lng numrul i data ncheierii acestuia, se precizeaz turistul/turitii beneficiar(i), clauzele contractuale (drepturile/obligaiile prilor contractante), avansul, data pn la care poate achita valoarea integral a contractului, tariful standard aferent serviciului respectiv, data plecrii i data de sosire. Dac turistul renun din vina sa la serviciile care fac obiectul respectivului contract, el datoreaz ageniei despgubiri difereniate n funcie de momentul renunrii (mai exact, numrul de zile nante de data plecrii). 1. 2. 3. 4. 5. 6. 7. 8. 9. S se execute gruparea i calculul sumei tarifelor la nivel de categorii de servicii. S se execute gruparea i calculul sumei tarifelor la nivel de tipuri de servicii. S se afieze suma tuturor tarifelor. S se execute gruparea i suma tarifelor la nivel de categorie de serviciu i tip de serviciu. S se creeze subtotaluri folosind operatorul UNION, calculndu-se suma tarifelor la nivel de categorie de serviciu. S se creeze subtotaluri folosind operatorul UNION, adugndu-se interogrii anterioare gruparea i calcularea sumei tarifelor la nivel de tip de serviciu. S se scrie interogarea SQL folosind operatorul ROLLUP pentru a calcula suma tarifelor, criteriul de grupare fiind doar categoria de serviciu. S se scrie interogarea SQL folosind operatorul ROLLUP pentru a calcula suma tarifelor, criteriile de grupare fiind categoria si tipul de serviciu. S se scrie interogarea SQL folosind operatorul ROLLUP pentru a calcula suma tarifelor, criteriile fiind categoria de serviciu, tipul de serviciu i ara.