Advertisement
Guest User

Untitled

a guest
Mar 25th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.05 KB | None | 0 0
  1. /*
  2. FlyByNite Data Warehouse Script.
  3. */
  4.  
  5. DELETE FROM SALES_FACT_DOS;
  6.  
  7. DROP TABLE SALES_FACT_DOS;
  8.  
  9. DROP TABLE CUSTOMER_DOS;
  10.  
  11. DROP TABLE PRODUCT_DOS;
  12.  
  13. DROP TABLE COUNTRY_DOS;
  14.  
  15. DROP TABLE TIMEDIMENSION_DOS;
  16.  
  17. DROP DIMENSION CUSTOMERDIMENSION_DOS;
  18.  
  19. DROP MATERIALIZED VIEW MV_SALESSINCE2013_DOS;
  20.  
  21. CREATE TABLE COUNTRY_DOS(COUNTRYID NUMERIC(10) NOT NULL,
  22. COUNTRYNAME VARCHAR2(40) NOT NULL,
  23. REGION VARCHAR2(11) NOT NULL,
  24. CONSTRAINT COUNTRY_PK_DOS PRIMARY KEY(COUNTRYID));
  25.  
  26. CREATE TABLE CUSTOMER_DOS(MOBILEPHONENUMBER NUMERIC(10) NOT NULL,
  27. FIRSTNAME VARCHAR2(40) NOT NULL,
  28. LASTNAME VARCHAR2(40) NOT NULL,
  29. EMAILADDRESS VARCHAR(40) NOT NULL,
  30. HOUSEADDRESS VARCHAR2(40) NOT NULL,
  31. STREETADDRESS VARCHAR2(50) NOT NULL,
  32. CITY VARCHAR2(30) NOT NULL,
  33. COUNTY_STATE VARCHAR2(40) NOT NULL,
  34. ZIPCODE VARCHAR2(20),
  35. COUNTRYID NUMERIC(10) NOT NULL,
  36. PASSPORT VARCHAR2(10) NOT NULL,
  37. CONSTRAINT CUSTOMER_PK_DOS PRIMARY KEY(EMAILADDRESS),
  38. CONSTRAINT COUNTRY_FK1_DOS FOREIGN KEY(COUNTRYID)
  39. REFERENCES COUNTRY_DOS(COUNTRYID));
  40.  
  41. CREATE TABLE PRODUCT_DOS(PRODUCTID NUMERIC(10) NOT NULL,
  42. PRODUCTNAME VARCHAR2(255) NOT NULL,
  43. PRODUCTUNITCOST DECIMAL(10,2) NOT NULL,
  44. CONSTRAINT PRODUCT_PK_DOS PRIMARY KEY(PRODUCTID));
  45.  
  46. CREATE TABLE TIMEDIMENSION_DOS(TIMEID NUMERIC(10) NOT NULL,
  47. TIMEDAY VARCHAR2(10) NOT NULL,
  48. TIMEMONTH VARCHAR2(9) NOT NULL,
  49. TIMEQUARTER NUMERIC(1) NOT NULL,
  50. TIMEYEAR NUMERIC(4) NOT NULL,
  51. TIMEDAYOFWEEK VARCHAR2(9) NOT NULL,
  52. CONSTRAINT TIME_PK_DOS PRIMARY KEY(TIMEID));
  53.  
  54. CREATE TABLE SALES_FACT_DOS(SALESID NUMERIC(10) NOT NULL,
  55. SALESDATE DATE NOT NULL,
  56. SALESUNITS NUMERIC(10) NOT NULL,
  57. EUROSALESAMOUNT DECIMAL(10,2) NOT NULL,
  58. TIMEID NUMERIC(10) NOT NULL,
  59. PRODUCTID NUMERIC(10) NOT NULL,
  60. COUNTRYID NUMERIC(10) NOT NULL,
  61. CUSTOMERID VARCHAR2(10) NOT NULL,
  62. CONSTRAINT SALES_PK_DOS PRIMARY KEY(SALESID),
  63. CONSTRAINT TIME_FK_DOS FOREIGN KEY(TIMEID)
  64. REFERENCES TIMEDIMENSION_DOS(TIMEID),
  65. CONSTRAINT PRODUCT_FK_DOS FOREIGN KEY(PRODUCTID)
  66. REFERENCES PRODUCT_DOS(PRODUCTID),
  67. CONSTRAINT COUNTRY_FK2_DOS FOREIGN KEY(COUNTRYID)
  68. REFERENCES COUNTRY_DOS(COUNTRYID),
  69. CONSTRAINT CUSTOMER_FK_DOS FOREIGN KEY(CUSTOMERID)
  70. REFERENCES CUSTOMER_DOS(EMAILADDRESS));
  71.  
  72. CREATE DIMENSION CUSTOMERDIMENSION_DOS
  73. LEVEL CUSTOMERID IS CUSTOMER_DOS.MOBILEPHONENUMBER
  74. LEVEL HOUSEADDRESS IS CUSTOMER_DOS.HOUSEADDRESS
  75. LEVEL STREETADDRESS IS CUSTOMER_DOS.STREETADDRESS
  76. LEVEL CITY IS CUSTOMER_DOS.CITY
  77. LEVEL COUNTY_STATE IS CUSTOMER_DOS.COUNTY_STATE
  78. LEVEL COUNTRY IS COUNTRY_DOS.COUNTRYID
  79. LEVEL REGION IS COUNTRY_DOS.REGION
  80. HIERARCHY ADDRESSROLLUP (
  81. HOUSEADDRESS CHILD OF
  82. STREETADDRESS CHILD OF
  83. CITY CHILD OF
  84. COUNTY_STATE CHILD OF
  85. COUNTRY CHILD OF
  86. REGION
  87. JOIN KEY CUSTOMER_DOS.COUNTRYID REFERENCES COUNTRY)
  88. ATTRIBUTE CUSTOMERID DETERMINES
  89. (CUSTOMER_DOS.FIRSTNAME, CUSTOMER_DOS.LASTNAME)
  90. ATTRIBUTE COUNTRY DETERMINES (COUNTRY_DOS.COUNTRYNAME);
  91.  
  92.  
  93. INSERT INTO COUNTRY_DOS VALUES(1,'Ireland','EU');
  94. INSERT INTO COUNTRY_DOS VALUES(2,'England','EU');
  95. INSERT INTO COUNTRY_DOS VALUES(3,'France','EU');
  96. INSERT INTO COUNTRY_DOS VALUES(4,'Spain','EU');
  97. INSERT INTO COUNTRY_DOS VALUES(5,'Germany','EU');
  98. INSERT INTO COUNTRY_DOS VALUES(6,'UK','EU');
  99.  
  100.  
  101. INSERT INTO PRODUCT_DOS VALUES(1,'Flights within a country', 25.00);
  102. INSERT INTO PRODUCT_DOS VALUES(2,'Flights Throughout EU' ,70.00);
  103. INSERT INTO PRODUCT_DOS VALUES(3,'Late Booking EU' ,50.00);
  104. INSERT INTO PRODUCT_DOS VALUES(4,'Late Booking INT' ,150.00);
  105. INSERT INTO PRODUCT_DOS VALUES(5,'Budjet Hotel' ,45.00);
  106. INSERT INTO PRODUCT_DOS VALUES(6,'Mid Range Hotel', 60.00);
  107. INSERT INTO PRODUCT_DOS VALUES(7,'Premium Hotel' ,100.00);
  108. INSERT INTO PRODUCT_DOS VALUES(8,'Overweight KG' ,15.00);
  109. INSERT INTO PRODUCT_DOS VALUES(9,'Boarding Card Pen', 40.00);
  110.  
  111.  
  112. --CUSTOMER PURCHASING A DOMESTIC FLIGHT FROM IRELAND
  113.  
  114. INSERT INTO CUSTOMER_DOS VALUES('0877785411', 'Diarmaid', 'O Sullivan', 'diarmaidosullivan@mycit.ie','Ambleside', 'SCR', 'Limerick', 'Limerick', '12554', '1', 'P225654');
  115. INSERT INTO CUSTOMER_DOS VALUES('0877556474', 'Laura', 'Butler', 'laurabutler@gmail.com','Downside', 'Ralla Road', 'Paris', 'Paris', '12555', '3', 'P256487');
  116. INSERT INTO CUSTOMER_DOS VALUES('0851256698', 'James', 'Green', 'jamesgreen@mycit.ie','Rockville', 'Chico Street', 'Valencia', 'Valencia', '34554', '004', 'P226474');
  117. INSERT INTO CUSTOMER_DOS VALUES('0836654214', 'Marcus', 'Finucan', 'marucsfinucan@mycit.ie','25', 'Amber Road', 'Berlin', 'Berlin', '67554', '5', 'P233644');
  118. INSERT INTO CUSTOMER_DOS VALUES('0836652312', 'John', 'O Shea', 'johnoshea@mycit.ie','Nashville Terrace', 'NCR', 'Limerick', 'Limerick', '99554', '1', 'P015654');
  119. INSERT INTO CUSTOMER_DOS VALUES('0862584213', 'David', 'O Leary', 'davidoleary@gmail.com','Broke Yard', 'N50', 'Barcelona', 'Barcelona', '13364', '4', 'P225111');
  120. INSERT INTO CUSTOMER_DOS VALUES('0869089523', 'JJ', 'O Neil', 'jjoneil@mycit.ie','44', 'Mount Terrace', 'Dortmund', 'Dortmund', '12666', '5', 'P227774');
  121. INSERT INTO CUSTOMER_DOS VALUES('0877744569', 'Roisin', 'Murphy', 'roisinmurphy@gmail.com','122', 'Raheen', 'Dublin', 'Dublin', '33554', '1', 'P885654');
  122.  
  123. SET SERVEROUTPUT ON FORMAT WRAPPED;
  124. EXECUTE DBMS_DIMENSION.DESCRIBE_DIMENSION('CUSTOMERDIMENSION_DOS');
  125.  
  126. --DATACUBE
  127.  
  128. SELECT COUNTY_STATE, TIMEMONTH,
  129. SUM(SALESUNITS * EUROSALESAMOUNT) AS SUMSALES
  130. FROM SALES_FACT_DOS, CUSTOMER_DOS, TIMEDIMENSION_DOS, COUNTRY_DOS
  131. WHERE SALES_FACT_DOS.CUSTOMERID = CUSTOMER_DOS.MOBILEPHONENUMBER
  132. AND SALES_FACT_DOS.TIMEID = TIMEDIMENSION_DOS.TIMEID
  133. AND CUSTOMER_DOS.COUNTRYID = COUNTRY_DOS.COUNTRYID
  134. AND (COUNTRYNAME = 'USA'
  135. OR COUNTRYNAME = 'Canada')
  136. AND TIMEYEAR = 2015
  137. GROUP BY CUBE (COUNTY_STATE, TIMEMONTH);
  138.  
  139. --ROLLUP
  140.  
  141. SELECT TIMEMONTH, TIMEYEAR,
  142. SUM(SALESUNITS * EUROSALESAMOUNT) AS SUMSALES
  143. FROM SALES_FACT_DOS, CUSTOMER_DOS, TIMEDIMENSION_DOS, COUNTRY_DOS
  144. WHERE SALES_FACT_DOS.CUSTOMERID = CUSTOMER_DOS.EMAILADDRESS
  145. AND SALES_FACT_DOS.TIMEID = TIMEDIMENSION_DOS.TIMEID
  146. AND CUSTOMER_DOS.COUNTRYID = COUNTRY_DOS.COUNTRYID
  147. AND (COUNTRYNAME = 'Ireland'
  148. OR COUNTRYNAME = 'UK')
  149. AND TIMEYEAR BETWEEN 2015 AND 2016
  150. GROUP BY ROLLUP (TIMEMONTH, TIMEYEAR);
  151.  
  152. --GROUPING SETS
  153.  
  154. SELECT ZIPCODE, TIMEMONTH,
  155. SUM(SALESUNITS * EUROSALESAMOUNT) AS SUMSALES
  156. FROM SALES_FACT_DOS, CUSTOMER_DOS, TIMEDIMENSION_DOS, COUNTRY_DOS
  157. WHERE SALES_FACT_DOS.CUSTOMERID = CUSTOMER_DOS.EMAILADDRESS
  158. AND SALES_FACT_DOS.TIMEID = TIMEDIMENSION_DOS.TIMEID
  159. AND CUSTOMER_DOS.COUNTRYID = COUNTRY_DOS.COUNTRYID
  160. AND (COUNTRYNAME = 'USA'
  161. OR COUNTRYNAME = 'Canada')
  162. AND TIMEYEAR = 2016
  163. GROUP BY GROUPING SETS((ZIPCODE, TIMEMONTH),
  164. ZIPCODE, TIMEMONTH, ());
  165.  
  166. --MATERIALSED VIEW
  167.  
  168. CREATE MATERIALIZED VIEW MV_SALESSINCE2013_DOS
  169. BUILD IMMEDIATE
  170. REFRESH COMPLETE ON DEMAND
  171. ENABLE QUERY REWRITE AS
  172. SELECT ZIPCODE, TIMEYEAR,
  173. SUM(SALESUNITS * EUROSALESAMOUNT) AS SUMREGION
  174. FROM SALES_FACT_DOS, CUSTOMER_DOS, TIMEDIMENSION_DOS, COUNTRY_DOS
  175. WHERE SALES_FACT_DOS.CUSTOMERID = CUSTOMER_DOS.EMAILADDRESS
  176. AND SALES_FACT_DOS.TIMEID = TIMEDIMENSION_DOS.TIMEID
  177. AND CUSTOMER_DOS.COUNTRYID = COUNTRY_DOS.COUNTRYID
  178. AND TIMEYEAR > 2013
  179. GROUP BY REGION, TIMEYEAR;
  180.  
  181. SELECT * FROM MV_SALESSINCE2013_DOS WHERE TIMEYEAR = 2016 AND COUNTRYNAME = 'Europe';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement