Sunteți pe pagina 1din 17

THE ACADEMY OF ECONOMIC STUDIES MASTER OF ACCOUNTING, AUDIT AND MANAGEMENT INFORMATION SYSTEMS

ADVANCED DATA BASE PROJECT TRAVEL AGENCY

BUCHAREST 2013

DINA DANA ALINA ADVANCED DATABASES PROJECT

It is required to make a database for the Company Double T. S.R.L., which was established in Alexandria city in 2009.03.02. Its main activity is provisions for tourism services. The agency manages its business to packages of offers exposed to customers. Customers are tourists who have a unique code, name and surname, personal number of identification, identity card number and number, birth date and a personal phone. The offer consists in several categories of services (tours, accommodation, airline tickets - tour, retour, tour - retour trip) which have a unique code and name service called destination name identified by the code and destination name, for country destination is specified destination area for which a code name withheld destination. Each service provider is identified by a unique code and name. The agency signs contracts from which can benefit many tourists (families). So, besides the number of contract and the date of its signing, the database also requires the tourists or the beneficiaries, contract terms (rights and obligations), the advanced payments, the date of which the client can pay the full value of the contract, the standard price of the service, departure and date of arrival. If the tourist drops the contract form his fault, he owes damages to the travel agency.

Reqirements

1. Design the sketch of the database according to the project theme.


Management rules: A contract may have one or more users; A client can conclude one or more contracts; Anyone of the clients or tourists can drop the services at a certain date; A contract contains only one type of services; A category of services includes several services; Each service can be done by several service providers; Each country of destination has several cities to be visited; Within a destination can provided multiple services; A service can be contracted in several localities.

DINA DANA ALINA ADVANCED DATABASES PROJECT

The relational model: Categorie_Servicii (Cod_Categorie_Servicii, Denumire_Categorie) Oferta_Servicii (Cod_Serviciu, Denumire_Serviciu, Cod_Categorie_Servicii) Prestatori_Servicii(Cod_Prestator_Servicii, Denumire_Prestator_Servicii, Cod_Serviciu) Tara (Cod_Tara, Denumire_Tara) Localitate (Cod_Localitate, Nume_Localitate, Cod_Tara) Oferte_Localitati (Cod_Serviciu, Cod_Localitate) C S L Contracte (NrContract, Data_Incheiere_Contract, Clauze_Contractuale, Avans, Data_Limita_Plata_Contract, Data_Plecare, Data_Sosire, Tarif, Cod_Serviciu) Turisti (Cod_Turist, CNP_Turist, Nume_Prenume, Serie_Nr_CI, Data_Nasterii, Telefon_Turist) Contracte_Turisti (NrContaract, Cod_Turist, Data_Anulare_Contract)

The database diagram

DINA DANA ALINA ADVANCED DATABASES PROJECT

1. Constraints: 1.1. The advanced payment is minimum 10% of the total payment ALTER TABLE CONTRACTE ADD CHECK(AVANS>10/100*TARIF) The possible date that a contract can be canceled must be before the current date

1.2. The departure date must be before the arrival date

DINA DANA ALINA ADVANCED DATABASES PROJECT

1.3. The limit of time in which the contract must be paid 5 days before the actual departure

The modification in the data is made in cascade where it is necessary

DINA DANA ALINA ADVANCED DATABASES PROJECT

2. Triggers:

2.1. The contracts that have the value more than 100 must not be deleted CREATE TRIGGER [STERGERE_CONTRACTE_TARIF>100] ON CONTRACTE FOR DELETE AS IF @@ROWCOUNT = 0 RETURN IF EXISTS (SELECT NR_CONTRACT FROM DELETED WHERE TARIF<100) BEGIN RAISERROR ('CAN NOT BE DELETED CONTRACTS WITH THE PRICE BIGGER THAN 100', 18,1) ROLLBACK TRANSACTION END

2.2. The contracts that have been cancelled are transferred into a new table CREATE TRIGGER [CONTRACTE_ANULATE] ON CONTRACTE_TURISTI FOR DELETE AS BEGIN INSERT INTO ARHIVA_CONTRACTE(NUMAR_CONTRACT,CODUL_TURIST) SELECT NR_CONTRACT, COD_TURIST FROM DELETED END

2.3. The service providers that have accommodation services must not be deleted CREATE TRIGGER [PRESTATORI_DE_SERVICII] ON PRESTATORI_SERVICII FOR DELETE AS IF @@ROWCOUNT = 0 RETURN IF EXISTS (SELECT DENUMIRE_PRESTATORI_SERVICII, COD_CATEGORIE_SERVICII FROM PRESTATORI_SERVICII INNER JOIN OFERTA_SERVICII ON PRESTATORI_SERVICII.COD_SERVICIU=OFERTA_SERVICII.COD_SERVICIU WHERE COD_CATEGORIE_SERVICII=3) BEGIN RAISERROR ('CAN NOT BE DETETED SERVICE PROVIDERS THAT DO ACCOMODATIONS IN HOTELS',18,1) ROLLBACK TRANSACTION END

DINA DANA ALINA ADVANCED DATABASES PROJECT

2.4. Will not accept the registration of contracts that have been negociated at first payment larger than 90% of the payment

CREATE TRIGGER [AVANS_MAXIM] ON CONTRACTE FOR INSERT AS IF @@ROWCOUNT =0 RETURN IF EXISTS ( SELECT * FROM CONTRACTE WHERE AVANS > 0.9*TARIF) BEGIN RAISERROR(' WILL NOT ACCEPT FIRST PAYMENT LARGER THAN 90% OF TOTAL PRICE',18,1) ROLLBACK TRANSACTION END

2.5. For the contracts negotiated in 2013 the contract value must not decrease, it can only increase CREATE TRIGGER [MODIFICARE_TARIF] ON CONTRACTE FOR UPDATE AS BEGIN IF EXISTS ( SELECT * FROM INSERTED, DELETED WHERE INSERTED.NR_CONTRACT=DELETED.NR_CONTRACT AND INSERTED.TARIF<DELETED.TARIF) BEGIN RAISERROR('TARIF CAN NOT BE LESS',18,2) ROLLBACK TRANSACTION END END

2.6. The customers that are female must not be deleted

CREATE TRIGGER [SEX_FEMININ] ON TURISTI FOR DELETE AS IF EXISTS ( SELECT * FROM DELETED WHERE SUBSTRING(CNP_TURIST,1,1)=2) BEGIN RAISERROR('NOT TO BE DELETED FEMALE TOURISTS',18,2) ROLLBACK TRANSACTION END

DINA DANA ALINA ADVANCED DATABASES PROJECT

2.7. The destination of a trip must not be changed 5 days before the departure CREATE TRIGGER [CONTRACTE_X_X] ON CONTRACTE FOR UPDATE AS IF EXISTS ( SELECT * FROM DELETED WHERE DELETED.DATA_PLECARE<DATEADD(DAY,5,GETDATE()) AND YEAR(DATA_PLECARE)=2013) BEGIN RAISERROR('NOT TO BE CHANGED DESTINATION WITH 5 DAYS BEFORE DEPARTURE',18,2) ROLLBACK TRANSACTION END

3. Views
3.1. Display the average value of contracts according to the type of service, when the departure date was within the last year CREATE VIEW AVERAGE2012 AS SELECT OFERTA_SERVICII.COD_SERVICIU, AVG(CONTRACTE.TARIF) AS AVEGARE_FOR_SERVICE FROM OFERTA_SERVICII INNER JOIN CONTRACTE ON OFERTA_SERVICII.COD_SERVICIU = CONTRACTE.COD_SERVICIU WHERE(YEAR(dbo.CONTRACTE.DATA_PLECARE)=YEAR(GETDATE()-1)) GROUP BY OFERTA_SERVICII.COD_SERVICIU

3.2. Display all contracts concluded in the current year

CREATE VIEW CONTRACTE2013 AS SELECT dbo.CONTRACTE.NR_CONTRACT, dbo.TURISTI.COD_TURIST, dbo.CONTRACTE.TARIF FROM CONTRACTE INNER JOIN CONTRACTE_TURISTI INNER JOIN TURISTI ON CONTRACTE_TURISTI.COD_TURIST = TURISTI.COD_TURIST ON CONTRACTE.NR_CONTRACT = CONTRACTE_TURISTI.NR_CONTRACT WHERE YEAR(dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT)=2013

DINA DANA ALINA ADVANCED DATABASES PROJECT

3.3. Display the total value of the contracts concluded in January 2013

CREATE VIEW TOTAL_CONTRACTE AS SELECT SUM(dbo.CONTRACTE.TARIF) AS TOTAL FROM CONTRACTE WHERE (MONTH(dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT) = 1) AND (YEAR(dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT) = YEAR(GETDATE())) 3.4. Display the minimum value of all contracts concluded in February CREATE VIEW MINIM AS SELECT MIN(dbo.CONTRACTE.TARIF) AS MINIM FROM CONTRACTE WHERE MONTH(dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT)=2

3.5. Display the months, from the previous year, in which the company has concluded more 1 contract

CREATE VIEW MONTHS AS SELECT DATEPART(MONTH, dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT) AS MONTH, COUNT(dbo.CONTRACTE.NR_CONTRACT) AS NR_TOTAL_CONTRACTE FROM CONTRACTE WHERE YEAR(dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT) = YEAR(GETDATE())-1 GROUP BY MONTH(dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT) HAVING COUNT(dbo.CONTRACTE.NR_CONTRACT)>1

3.6. Display all tourists that have concluded contracts for services in Spain, for accommodation

CREATE VIEW TURIST_CAUTAT_DUPA_CNP AS SELECT dbo.CONTRACTE.NR_CONTRACT, dbo.CONTRACTE.COD_SERVICIU, dbo.TURISTI.CNP_TURIST, dbo.TURISTI.COD_TURIST, dbo.CONTRACTE.DATA_PLECARE, dbo.CONTRACTE.DATA_SOSIRE FROM CONTRACTE INNER JOIN CONTRACTE_TURISTI INNER JOIN TURISTI ON CONTRACTE_TURISTI.COD_TURIST = TURISTI.COD_TURIST ON CONTRACTE.NR_CONTRACT = CONTRACTE_TURISTI.NR_CONTRACT WHERE dbo.TURISTI.CNP_TURIST = 192121265965
8

DINA DANA ALINA ADVANCED DATABASES PROJECT

3.7. Display all tourists that have concluded contracts for services in Spain, for accommodation

CREATE VIEW TURISTI_ACCOMODATION_SPAIN AS SELECT dbo.TURISTI.NUME, dbo.TURISTI.PRENUME, dbo.TURISTI.CNP_TURIST, dbo.CONTRACTE.TARIF FROM dbo.CONTRACTE INNER JOIN dbo.CONTRACTE_TURISTI INNER JOIN dbo.TURISTI ON dbo.CONTRACTE_TURISTI.COD_TURIST=dbo.TURISTI.COD_TURIST ON dbo.CONTRACTE.NR_CONTRACT=dbo.CONTRACTE_TURISTI.NR_CONTRACT WHERE dbo.CONTRACTE.COD_SERVICIU = 302 3.8. Display the most 3 important contracts concluded in the previous year CREATE VIEW TOP3 AS SELECT TOP 3 dbo.CONTRACTE.TARIF, dbo.OFERTA_SERVICII.COD_SERVICIU, dbo.CONTRACTE.NR_CONTRACT FROM dbo.CONTRACTE INNER JOIN dbo.OFERTA_SERVICII ON dbo.CONTRACTE.COD_SERVICIU=dbo.OFERTA_SERVICII.COD_SERVICIU WHERE YEAR(dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT)=YEAR(GETDATE())-1 ORDER BY dbo.CONTRACTE.TARIF DESC

3.9. Display the departure date for tourists that concluded contracts in the current year

CREATE VIEW TOP3 AS SELECT TOP 3 dbo.CONTRACTE.TARIF, dbo.OFERTA_SERVICII.COD_SERVICIU, dbo.CONTRACTE.NR_CONTRACT FROM dbo.CONTRACTE INNER JOIN dbo.OFERTA_SERVICII ON dbo.CONTRACTE.COD_SERVICIU=dbo.OFERTA_SERVICII.COD_SERVICIU WHERE YEAR(dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT)=YEAR(GETDATE())-1 ORDER BY dbo.CONTRACTE.TARIF DESC

3.10.

Display the details of the arrivals for tourists according to the date

CREATE VIEW ARRIVALS AS

DINA DANA ALINA ADVANCED DATABASES PROJECT

SELECT CONVERT(CHAR(10),dbo.CONTRACTE.DATA_SOSIRE,113) AS FULL_DATE, DATEPART(DAY,dbo.CONTRACTE.DATA_SOSIRE) AS DAY, DATEPART(MONTH,dbo.CONTRACTE.DATA_SOSIRE) AS MONTH, DATEPART(YEAR,dbo.CONTRACTE.DATA_SOSIRE) AS YEAR, dbo.CONTRACTE.NR_CONTRACT, dbo.CONTRACTE_TURISTI.COD_TURIST, dbo.TURISTI.CNP_TURIST FROM CONTRACTE INNER JOIN dbo.CONTRACTE_TURISTI INNER JOIN dbo.TURISTI ON dbo.CONTRACTE_TURISTI.COD_TURIST=dbo.TURISTI.COD_TURIST ON CONTRACTE.NR_CONTRACT=CONTRACTE_TURISTI.NR_CONTRACT COMPUTE COUNT(CONVERT(CHAR(10),dbo.CONTRACTE.DATA_SOSIRE,113)), MIN(CONVERT(CHAR(10),dbo.CONTRACTE.DATA_SOSIRE,113)), MAX(CONVERT(CHAR(10),dbo.CONTRACTE.DATA_SOSIRE,113))

3.11. Display the larger service from the current year that has the value more that 150 CREATE VIEW SERVICE_LARGER150_2013 AS SELECT dbo.OFERTA_SERVICII.COD_SERVICIU, dbo.OFERTA_SERVICII.DENUMIRE_SERVICIU, dbo.CONTRACTE.TARIF FROM dbo.OFERTA_SERVICII INNER JOIN dbo.CONTRACTE ON dbo.OFERTA_SERVICII.COD_SERVICIU=dbo.CONTRACTE.COD_SERVICIU WHERE (dbo.CONTRACTE.TARIF>150) AND (YEAR(dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT)=YEAR(GETDATE()))

4. Procedures:
4.1. Display the tourists that have the first letter in their name D CREATE PROCEDURE CLIENTS_LIST AS SELECT dbo.TURISTI.NUME, dbo.TURISTI.PRENUME FROM dbo.TURISTI WHERE NUME LIKE 'D%' EXEC CLIENTS_LIST

4.2. Compute a 5% discount for contracts that belong to the month January, current year alter PROCEDURE DISCOUNT_IANUARIE @DISC NUMERIC(3,2) = 0.05 AS BEGIN
10

DINA DANA ALINA ADVANCED DATABASES PROJECT

SELECT dbo.CONTRACTE.NR_CONTRACT, @DISC*dbo.CONTRACTE.TARIF AS DISCOUNT, dbo.CONTRACTE.TARIF-@DISC*dbo.CONTRACTE.TARIF AS SUMA_FINALA FROM dbo.CONTRACTE WHERE (MONTH(dbo.CONTRACTE.DATA_PLECARE)=1) AND (YEAR(dbo.CONTRACTE.DATA_PLECARE))=YEAR(GETDATE()) END EXEC DISCOUNT_IANUARIE

4.3. Display all contracts that have been made for summer

CREATE PROCEDURE TOURISTS_SUMMER @DATE1 AS DATETIME, @DATE2 AS DATETIME AS BEGIN SELECT dbo.CONTRACTE.NR_CONTRACT, dbo.TURISTI.NUME, dbo.TURISTI.PRENUME, dbo.CONTRACTE.TARIF FROM CONTRACTE INNER JOIN CONTRACTE_TURISTI INNER JOIN TURISTI ON CONTRACTE_TURISTI.COD_TURIST = TURISTI.COD_TURIST ON CONTRACTE.NR_CONTRACT=CONTRACTE_TURISTI.NR_CONTRACT WHERE dbo.CONTRACTE.DATA_PLECARE BETWEEN @DATE1 AND @DATE2 ORDER BY dbo.CONTRACTE.NR_CONTRACT END EXEC TOURISTS_SUMMER '2012/06/01', '2012-08-30' 4.4. Display all contracts that have been made for summer with implicit values

CREATE PROCEDURE TOURISTS_SUMMER_DEFAULT_VALUES @DATE1 AS DATETIME='2012/06/01', @DATE2 AS DATETIME='2012/06/30' AS BEGIN SELECT dbo.CONTRACTE.NR_CONTRACT, dbo.TURISTI.NUME, dbo.TURISTI.PRENUME, dbo.CONTRACTE.TARIF FROM CONTRACTE INNER JOIN CONTRACTE_TURISTI INNER JOIN TURISTI ON CONTRACTE_TURISTI.COD_TURIST = TURISTI.COD_TURIST ON CONTRACTE.NR_CONTRACT=CONTRACTE_TURISTI.NR_CONTRACT WHERE dbo.CONTRACTE.DATA_PLECARE BETWEEN @DATE1 AND @DATE2 ORDER BY dbo.CONTRACTE.NR_CONTRACT
11

DINA DANA ALINA ADVANCED DATABASES PROJECT

END EXEC TOURISTS_SUMMER_DEFAULT_VALUES

4.5. Compute a discount like: Total discount = 0.05 * contract value + 0.02 * maximum value of contracts with the specific tourists

ALTER PROCEDURE MAXIMUM_CERTAIN_TOURIST @TOURIST AS VARCHAR(20), @MAXIMUM AS MONEY OUTPUT AS SELECT @MAXIMUM=MAX(dbo.CONTRACTE.TARIF) FROM CONTRACTE INNER JOIN CONTRACTE_TURISTI INNER JOIN TURISTI ON CONTRACTE_TURISTI.COD_TURIST = TURISTI.COD_TURIST ON CONTRACTE.NR_CONTRACT=CONTRACTE_TURISTI.NR_CONTRACT WHERE dbo.TURISTI.COD_TURIST=@TOURIST AND YEAR(dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT)=YEAR(GETDATE()) DECLARE @VARIABILA_DE_MEMORIE AS MONEY EXEC MAXIMUM_CERTAIN_TOURIST '407' ,@VARIABILA_DE_MEMORIE OUTPUT SELECT dbo.CONTRACTE.NR_CONTRACT, dbo.CONTRACTE.TARIF*0.05 AS DISCOUNT1, @VARIABILA_DE_MEMORIE*0.02 AS DISCOUNT2, dbo.CONTRACTE.TARIF*0.05+@VARIABILA_DE_MEMORIE*0.02 AS DISCOUNT_TOTAL FROM CONTRACTE INNER JOIN CONTRACTE_TURISTI INNER JOIN TURISTI ON CONTRACTE_TURISTI.COD_TURIST = TURISTI.COD_TURIST ON CONTRACTE.NR_CONTRACT=CONTRACTE_TURISTI.NR_CONTRACT WHERE dbo.TURISTI.COD_TURIST='407'

4.6. Display the list of servicies according to country and city CREATE PROCEDURE SERVICE_DELTAILED_LIST AS BEGIN SELECT OFERTE_LOCALITATI.COD_SERVICIU, OFERTA_SERVICII.DENUMIRE_SERVICIU, LOCALITATE.DENUMIRE_LOCALITATE, TARA.DENUMIRE_TARA FROM LOCALITATE INNER JOIN OFERTE_LOCALITATI ON LOCALITATE.COD_LOCALITATE = OFERTE_LOCALITATI.COD_LOCALITATE INNER JOIN
12

DINA DANA ALINA ADVANCED DATABASES PROJECT

OFERTA_SERVICII ON OFERTE_LOCALITATI.COD_SERVICIU = OFERTA_SERVICII.COD_SERVICIU INNER JOIN TARA ON LOCALITATE.COD_TARA = TARA.COD_TARA ORDER BY OFERTA_SERVICII.COD_SERVICIU END EXEC SERVICE_DELTAILED_LIST

4.7. RETURN ALL SERVICES RELATING A SPECIFIED COUNTRY - INDIA, ACCORDING TO THE CONNTRYS CODE 25

CREATE PROC SERVICIES_INDIA @TARA_DE_DESTINATIE AS VARCHAR(10) AS BEGIN SELECT dbo.OFERTA_SERVICII.COD_SERVICIU, dbo.OFERTA_SERVICII.DENUMIRE_SERVICIU, dbo.TARA.DENUMIRE_TARA FROM LOCALITATE INNER JOIN OFERTE_LOCALITATI ON LOCALITATE.COD_LOCALITATE = OFERTE_LOCALITATI.COD_LOCALITATE INNER JOIN OFERTA_SERVICII ON OFERTE_LOCALITATI.COD_SERVICIU = OFERTA_SERVICII.COD_SERVICIU INNER JOIN TARA ON LOCALITATE.COD_TARA = TARA.COD_TARA WHERE dbo.TARA.COD_TARA = @TARA_DE_DESTINATIE END EXEC SERVICIES_INDIA @TARA_DE_DESTINATIE = 25

4.8. Sa se afiseze un mesaj in cazul in care exita avans null sau un avans la o valoare diferita de cea specificata

CREATE PROCEDURE ADVANCED_PAYMENT @PAVANS AS MONEY AS BEGIN IF @PAVANS not in (SELECT AVANS FROM dbo.CONTRACTE) BEGIN PRINT 'NO ADVANCE PAYMENT WAS REGISTRED' RETURN END ELSE SELECT *
13

DINA DANA ALINA ADVANCED DATABASES PROJECT

FROM dbo.CONTRACTE WHERE AVANS=@PAVANS END EXEC ADVANCED_PAYMENT 30

4.9. Display a message in the numeric personal code is not specified

CREATE PROCEDURE CNP_TOURISTS @PCNP AS NUMERIC AS BEGIN WHILE @PCNP IS NULL PRINT 'NO CNP WAS RGISTERED!!' SELECT * FROM dbo.TURISTI WHERE dbo.TURISTI.CNP_TURIST=@PCNP END EXEC CNP_TOURISTS @PCNP=1921212659652

5. FUNCTIONS
5.1. For each contract display the number of days between the current date and the departure date. Only display for contracts that must be executed starting the current day

CREATE FUNCTION F_DAYS_DIFF (@PNR_CONTRACT AS INT) RETURNS TINYINT BEGIN DECLARE @DAYS TINYINT SELECT @DAYS = CONVERT(TINYINT,DATEDIFF(D,DATA_PLECARE,GETDATE())/365.25) FROM CONTRACTE RETURN @DAYS END SELECT dbo.CONTRACTE.NR_CONTRACT, dbo.TURISTI.NUME, dbo.TURISTI.PRENUME, dbo.F_DAYS_DIFF(CONTRACTE.NR_CONTRACT) AS DATE_DIF FROM CONTRACTE INNER JOIN
14

DINA DANA ALINA ADVANCED DATABASES PROJECT

CONTRACTE_TURISTI INNER JOIN TURISTI ON CONTRACTE_TURISTI.COD_TURIST = TURISTI.COD_TURIST ON CONTRACTE.NR_CONTRACT=CONTRACTE_TURISTI.NR_CONTRACT WHERE CONVERT(TINYINT,DATEDIFF(D,dbo.CONTRACTE.DATA_PLECARE,GETDATE())/365 .25) > 0 ORDER BY dbo.CONTRACTE.NR_CONTRACT ASC

5.2. Display for each type of service, the name of the service, the number of contracts made on and the averege value of the contracts. The display is made between two different dates.

CREATE FUNCTION FSTATISTICS (@PDATE1 DATE, @PDATE2 DATE) RETURNS TABLE RETURN SELECT dbo.OFERTA_SERVICII.COD_SERVICIU, COUNT(dbo.CONTRACTE.NR_CONTRACT )AS NO_CONTRCT, AVG(CONVERT(SMALLMONEY,dbo.CONTRACTE.TARIF)) AS TARIF_MEDIU FROM dbo.CONTRACTE INNER JOIN dbo.OFERTA_SERVICII ON dbo.CONTRACTE.COD_SERVICIU=dbo.OFERTA_SERVICII.COD_SERVICIU WHERE dbo.CONTRACTE.DATA_INCHEIERE_CONTRACT BETWEEN @PDATE1 AND @PDATE2 GROUP BY dbo.OFERTA_SERVICII.COD_SERVICIU SELECT * FROM FSTATISTICS(GETDATE()-365,GETDATE())

5.3.Display a personal code like: First 2 characters fom name, first character of surname and first character of the CNP.

CREATE FUNCTION CODIFICARE (@PNUME AS VARCHAR(50), @PPRENUME AS VARCHAR(50), @PCNP AS CHAR(13)) RETURNS CHAR(4) AS BEGIN DECLARE @C1 AS CHAR(2) DECLARE @C2 AS CHAR(1) DECLARE @C3 AS CHAR(1) SET @C1 = LEFT(@PNUME,2) SET @C2 = LEFT(@PPRENUME,1) SET @C3 = LEFT(@PCNP,1)
15

DINA DANA ALINA ADVANCED DATABASES PROJECT

RETURN @C1+@C2+@C3 END SELECT TURISTI.NUME, TURISTI.PRENUME, TURISTI.CNP_TURIST, DBO.CODIFICARE (NUME,PRENUME,CNP_TURIST) AS COD FROM TURISTI

5.4. Display the service with the most contracts

CREATE FUNCTION SERVICII_IMP() RETURNS TABLE AS RETURN (SELECT TOP 1 dbo.OFERTA_SERVICII.COD_SERVICIU, COUNT(dbo.CONTRACTE.NR_CONTRACT) AS NR FROM dbo.CONTRACTE INNER JOIN dbo.OFERTA_SERVICII ON dbo.CONTRACTE.COD_SERVICIU=dbo.OFERTA_SERVICII.COD_SERVICIU GROUP BY dbo.OFERTA_SERVICII.COD_SERVICIU) SELECT * FROM dbo.SERVICII_IMP()

16

S-ar putea să vă placă și