Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 28

INFORMATION SYSTEM APPLICATIONS

PERSONAL PROJECT

Home Office System


The final version
Date: July - 30 - 2021

Instructor: Nguyen Thi Thanh Tam

Document Create by: Mai Le Duan

Class: CMU IS 401 SC


 Student ID: 24211204940

International School, Duy Tan University


I. Database Diagram - HOME OFFICE SYSTEM
Customer
Customer_ID

Customer_Name Product_Line
Customer_Type Product_Line_Name

Customer_Zipcode PL_Prior_Years_Sales_Goal

Customer_Years PL_Current_Year_Sales_Goal

T_Order Order_Line Product


Order_Number Order_Number Product_ID

Order_Placement_Date Product_ID Product_Description

Order_Fulfillment_Date Order_Quantity Product_Finish

Order_Number_of_Shipments Product_Price

Customer_ID Product_Cost

PR_Prior_Year_Sales_Goal

PR_Current_Year_Sales_Goal

Product_Line_Name

Invoice Payment
Invoice_Number Invoice_Number

Order_Number Payment_Date

INFORMATION
Invoice_Date SYSTEM APPLICATIONS
Payment_Amount – Personal Project 1

History_Invoice
Invoice_Number

Payment_Total

CREATE DATABASE HomeOffice;


USE HomeOffice;

CREATE TABLE Customer(


Customer_ID VARCHAR(20), Customer_Name NVARCHAR(50), Customer_Type
VARCHAR(10),
Customer_Zipcode VARCHAR(10),Customer_Years INT,
CONSTRAINT pk_cid PRIMARY KEY(Customer_ID));

CREATE TABLE Product_Line(


Product_Line_Name NVARCHAR(50), PL_Prior_Years_Sales_Goal INT,
PL_Current_Year_Sales_Goal INT,
CONSTRAINT pk_pln PRIMARY KEY(Product_Line_Name));

Home Office System


CREATE TABLE T_Order(
Order_Number INT, Order_Placement_Date DATE, Order_Fulfillment_Date DATE,
Order_Number_of_Shipments INT, Customer_ID VARCHAR(20),
CONSTRAINT pk_on PRIMARY KEY(Order_Number),
CONSTRAINT fk_ci FOREIGN KEY(Customer_ID) REFERENCES Customer(Customer_ID));

CREATE TABLE Invoice(


Invoice_Number INT, Order_Number INT, Invoice_Date DATE,
CONSTRAINT pk_in PRIMARY KEY(Invoice_Number),
CONSTRAINT fk_oni FOREIGN KEY(Order_Number) REFERENCES T_Order(Order_Number),
CONSTRAINT unique_Order_Number unique(Order_Number));

CREATE TABLE Payment(


Invoice_Number INT, Payment_Date DATE, Payment_Amount INT,
CONSTRAINT pk_pd PRIMARY KEY(Payment_Date),
CONSTRAINT fk_inp FOREIGN KEY(Invoice_Number) REFERENCES
Invoice(Invoice_Number));

CREATE TABLE History_Invoice(


Invoice_Number INT, Payment_Total INT,
CONSTRAINT fk_in FOREIGN KEY(Invoice_Number) REFERENCES
Invoice(Invoice_Number),
CONSTRAINT unique_Invoice_Number unique(Invoice_Number));

CREATE TABLE Product(


INFORMATION
Product_ID SYSTEM
CHAR(5), APPLICATIONS
Product_Description – Personal Project
NVARCHAR(100), Product_Finish 2
NVARCHAR(50),
Product_Price INT, Product_Cost INT, PR_Prior_Year_Sales_Goal INT,
PR_Current_Year_Sales_Goal INT, Product_Line_Name NVARCHAR(50),
CONSTRAINT pk_pid PRIMARY KEY(Product_ID),
CONSTRAINT fk_pln FOREIGN KEY(Product_Line_Name) REFERENCES
Product_Line(Product_Line_Name));

CREATE TABLE Order_Line(


Order_Number INT, Product_ID CHAR(5), Order_Quantity INT,
CONSTRAINT fk_on FOREIGN KEY(Order_Number) REFERENCES T_Order(Order_Number),
CONSTRAINT fk_pi FOREIGN KEY(Product_ID) REFERENCES Product(Product_ID));

--Nhập dữ liệu vào bảng Customer


INSERT INTO Customer
VALUES('C01',N'Mai Lê Duẩn',N'Vip','16000',2);
INSERT INTO Customer
VALUES('C02',N'Trần Thị Kim Như',N'Normal','17000',3);
INSERT INTO Customer
VALUES('C03',N'Phan Thanh Nhàn',N'Vip','18000',5);
INSERT INTO Customer
VALUES('C04',N'Lê Kim Anh',N'Normal','19000',1);
INSERT INTO Customer
VALUES('C05',N'Nguyễn Thị Thanh',N'Normal','19000',1);
INSERT INTO Customer

Home Office System


VALUES('C06',null,null,null,null);
SELECT*FROM Customer
*Hình ảnh minh họa:

--Nhập dữ liệu vào bảng Product_Line


INSERT INTO Product_Line
VALUES(N'Gỗ',3000000,2000000);
INSERT INTO Product_Line
VALUES(N'Nhựa',4000000,5000000);
INSERT INTO Product_Line
VALUES(N'Inox',6000000,6000000);
INSERT INTO Product_Line
VALUES(N'Thực Phẩm',5000000,4000000);
SELECT*FROM Product_Line
*Hình ảnh minh họa:
INFORMATION SYSTEM APPLICATIONS – Personal Project 3

--Nhập dữ liệu vào bảng T_Other


INSERT INTO T_Order
VALUES(1,'02/02/2020','02/03/2020',101,'C01');
INSERT INTO T_Order
VALUES(2,'06/04/2020','06/04/2020',102,'C02');
INSERT INTO T_Order
VALUES(3,'01/01/2020','01/02/2020',103,'C03');
INSERT INTO T_Order
VALUES(4,'04/25/2020','04/26/2020',104,'C04');
INSERT INTO T_Order
VALUES(5,'08/21/2020','08/22/2020',105,'C01');
INSERT INTO T_Order
VALUES(6,'08/21/2020','08/22/2020',105,'C06');
SELECT*FROM T_Order

Home Office System


*Hình ảnh minh họa:

--Nhập dữ liệu vào bảng Invoice


INSERT INTO Invoice
VALUES(201,1,'02/03/2020');
INSERT INTO Invoice
VALUES(202,2,'04/07/2020');
INSERT INTO Invoice
VALUES(203,3,'01/02/2020');
INSERT INTO Invoice
VALUES(204,4,'04/26/2020');
INSERT INTO Invoice
VALUES(205,5,'08/22/2020');
SELECT*FROM Invoice
*Hình ảnh minh họa:
INFORMATION SYSTEM APPLICATIONS – Personal Project 4

--Nhập dữ liệu vào bảng Payment


INSERT INTO Payment
VALUES(201,'02/03/2020',1000000);
INSERT INTO Payment
VALUES(202,'04/07/2020',2000000);
INSERT INTO Payment
VALUES(203,'01/02/2020',2500000);
INSERT INTO Payment
VALUES(204,'04/26/2020',400000);
INSERT INTO Payment
VALUES(205,'08/22/2020',500000);
SELECT*FROM Payment

Home Office System


*Hình ảnh minh họa:

--Nhập dữ liệu vào bảng History_Invoice


INSERT INTO History_Invoice
VALUES(201,1000000);
INSERT INTO History_Invoice
VALUES(202,2000000);
INSERT INTO History_Invoice
VALUES(203,2000000);
INSERT INTO History_Invoice
VALUES(204,350000);
INSERT INTO History_Invoice
VALUES(205,500000);
SELECT*FROM History_Invoice
*Hình ảnh minh họa:
INFORMATION SYSTEM APPLICATIONS – Personal Project 5

--Nhập dữ liệu vào bảng Product


INSERT INTO Product
VALUES('P0001',N'Bàn Ghế',N'Đà Nẵng',200000,50000,2000000,1500000,N'Gỗ');
INSERT INTO Product
VALUES('P0002',N'Cửa kéo chống muỗi',N'Sài
Gòn',1000000,100000,3000000,1500000,'Inox');
INSERT INTO Product
VALUES('P0003',N'Tủ quần áo',N'Đà
Nẵng',1500000,500000,4500000,3000000,N'Nhựa');
INSERT INTO Product
VALUES('P0004',N'Sữa Bò',N'Lâm Đồng',150000,20000,2000000,3000000,N'Thực
Phẩm');
INSERT INTO Product
VALUES('P0005',N'Gạo',N'Huế',150000,20000,2000000,2000000,N'Thực Phẩm');
SELECT*FROM Product

Home Office System


*Hình ảnh minh họa:

--Nhập dữ liệu vào bảng Order_Line


INSERT INTO Order_Line
VALUES(1,'P0001',1);
INSERT INTO Order_Line
VALUES(1,'P0002',1);
INSERT INTO Order_Line
VALUES(2,'P0003',1);
INSERT INTO Order_Line
VALUES(2,'P0004',6);
INSERT INTO Order_Line
VALUES(3,'P0004',5);
INSERT INTO Order_Line
VALUES(4,'P0001',2);
INSERT INTO Order_Line
VALUES(5,'P0001',3);
INSERT INTO Order_Line
INFORMATION SYSTEM APPLICATIONS – Personal Project 6
VALUES(5,'P0004',10);
SELECT* FROM Order_Line
*Hình ảnh minh họa:

II. Write 25 SQL Queries:

-- Query SQL 1: List all details for "Bàn Ghế"


SELECT* FROM Product WHERE Product_Description = N'Bàn Ghế';

Home Office System


*Hình ảnh minh họa:

-- Query SQL 2: List details of customers ni the zipcode = 16000


SELECT* FROM Customer WHERE Customer_Zipcode = '16000';
*Hình ảnh minh họa:

-- Query SQL 3: How many orders have we received FROM "Mai Lê Duẩn"
SELECT t.Customer_ID, COUNT(*) AS [Sum_Orders]
FROM T_Order t, Customer c
WHERE (t.Customer_ID = c.Customer_ID) and (Customer_Name = N'Mai Lê Duẩn')
GROUP BY t.Customer_ID;
*Hình ảnh minh họa:

INFORMATION SYSTEM APPLICATIONS – Personal Project 7

-- Query SQL 4: What products have had total sales exceeding VND800000 during
the past month(June/2020)?
SELECT p.Product_ID, p.Product_Description,p.Product_Price*ol.Order_Quantity
as [Total]
FROM Order_Line ol, Product p, T_Order o
WHERE (ol.Product_ID = p.Product_ID) and (p.Product_Price*ol.Order_Quantity >
800000)
and (MONTH(o.Order_Placement_Date) = 6)
and (o.Order_Number = ol.Order_Number)
*Hình ảnh minh họa:

-- Query SQL 5: What is the average Product_Price for each Product_Line_Name?


SELECT Product_Line_Name, AVG(Product_Price) AS Average_Product_Price
FROM Product
GROUP BY Product_Line_Name

Home Office System


*Hình ảnh minh họa:

-- Query SQL 6: How many different items were ordered on order number 2?
SELECT COUNT(Product_ID) AS [Total]
FROM Order_Line
WHERE Order_Number = 2
*Hình ảnh minh họa:

-- Query SQL 7: How many different items were ordered on order number 4, and
what are they?
SELECT Order_Number, p.Product_ID,p.Product_Description, Order_Quantity,
INFORMATION SYSTEM APPLICATIONS – Personal Project
COUNT(ol.Product_ID) as[Total]
8
FROM Order_Line ol, Product p
WHERE (Order_Number = 4) and (p.Product_ID = ol.Product_ID)
GROUP BY Order_Number, p.Product_ID, p.Product_Description, Order_Quantity
*Hình ảnh minh họa:

-- Query SQL 8: Which orders have been placed since "04/25/2020"


SELECT *
FROM T_Order
WHERE Order_Placement_Date > '04/25/2020'
*Hình ảnh minh họa:

Home Office System


-- Query SQL 9: What furniture does Pine Calley carry that isn't made of "Da
Nang"
SELECT Product_Description, Product_Finish
FROM Product
WHERE Product_Finish != N'Đà Nẵng';
*Hình ảnh minh họa:

-- Query SQL 10: List product_description, finish, price for all Bàn and Tủ
that cost more than VND25000
SELECT Product_Description, Product_Finish, Product_Price
FROM Product
WHERE (Product_Description like N'Bàn%' or Product_Description like N'Tủ%')
and (Product_Cost > 25000)
*Hình ảnh minh họa:

INFORMATION SYSTEM APPLICATIONS – Personal Project 9

-- Query SQL 11: Which products in the Product view have a price between
VND1000000 and VND1500000?
SELECT Product_Description, Product_Price
FROM Product
WHERE Product_Price BETWEEN 1000000 and 1500000
*Hình ảnh minh họa:

-- Query SQL 12: List customer_ID, customer_name, Customer_Type for all


customers in the Customer whose Type: VIP. List the customers alphabetically
BY customer_name
SELECT Customer_ID, Customer_name, Customer_Type
FROM Customer
WHERE Customer_Type = 'VIP'
ORDER BY Customer_name

Home Office System


*Hình ảnh minh họa:

-- Query SQL 13: Count the number of customers with addresses in each Zipcode
to which we ship
SELECT Customer_Zipcode, COUNT(Customer_Zipcode) as [Total]
FROM Customer
GROUP BY Customer_Zipcode
*Hình ảnh minh họa:

--INFORMATION SYSTEM
Query SQL 14: Find APPLICATIONS
only Zipcode with more –than
Personal Project
one customer 10
SELECT Customer_Zipcode, COUNT(Customer_Zipcode) as [Total]
FROM Customer
GROUP BY Customer_Zipcode
HAVING COUNT(Customer_Zipcode) > 1
*Hình ảnh minh họa:

-- Query SQL 15: What is total value of orders placed for each furniture
product
SELECT ol.Product_ID, SUM(Product_Price*Order_Quantity) as [Total]
FROM Order_Line ol, Product p
WHERE ol.Product_ID = p.Product_ID
GROUP BY ol.Product_ID
*Hình ảnh minh họa:

Home Office System


-- Query SQL 16: For each customer, list the customer_id and the total number
of orders placed in 2020
SELECT o.Customer_ID, COUNT(Order_Number) as [Total]
FROM Customer c, T_Order o
WHERE o.Customer_ID = c.Customer_ID
GROUP BY o.Customer_ID
*Hình ảnh minh họa:

-- Query SQL 17: For each customer who had more than two orders, list the
customer_id and the total number of orders placed
-- Chèn thêm Order để test
INSERT INTO T_Order
VALUES(7,'08/23/2020','08/24/2020',106,'C01');
SELECT *FROM T_Order
*Hình ảnh minh họa:

INFORMATION SYSTEM APPLICATIONS – Personal Project 11

SELECT o.Customer_ID, COUNT(Order_Number) as [Total]


FROM Customer c, T_Order o
WHERE o.Customer_ID = c.Customer_ID
GROUP BY o.Customer_ID
HAVING COUNT(Order_Number) > 2
*Hình ảnh minh họa:

-- Query SQL 18: What are the names of all customers who have placed orders?

Home Office System


SELECT *
FROM Customer
WHERE exists(SELECT Order_Number FROM T_Order WHERE Customer_ID =
Customer.Customer_ID)
*Hình ảnh minh họa:

-- Query SQL 19: List Customer_ID, name, Order_Number for all customers
listed in the CUSTOMER TABLE. Include the customer identification number and
name even if there is no order available for that customer
SELECT c.Customer_ID, Customer_Name, Order_Number
FROM Customer c left join T_Order o ON
c.Customer_ID = o.Customer_ID;
*Hình ảnh minh họa:

INFORMATION SYSTEM APPLICATIONS – Personal Project 12

-- Query SQL 20: List Customer_ID, name, Order_Number for all orders listed
in the ORDER TABLE. Include the order number even if there is no order
available for that customer
SELECT c.Customer_ID, Customer_Name, Order_Number
FROM Customer c right join T_Order o ON
c.Customer_ID = o.Customer_ID;

Home Office System


*Hình ảnh minh họa:

-- Query SQL 21: Assemble information necessary to CREATE an invoice for


order number 1.
SELECT c.Customer_Name,c.Customer_Type,c.Customer_Zipcode,
o.Order_Fulfillment_Date, o.Order_Fulfillment_Date, p.Product_Description,
ol.Order_Quantity, p.Product_Price, SUM(Product_Price*Order_Quantity) as
[Total]
FROM T_Order o, Customer c, Order_Line ol, Product p
WHERE c.Customer_ID = o.Customer_ID
and o.Order_Number = ol.Order_Number
and ol.Product_ID = p.Product_ID
and o.Order_Number = 1
GROUP BY c.Customer_Name,c.Customer_Type,c.Customer_Zipcode,
INFORMATION SYSTEMo.Order_Fulfillment_Date,
o.Order_Fulfillment_Date, APPLICATIONS – Personal Project
p.Product_Description, 13
ol.Order_Quantity, p.Product_Price
*Hình ảnh minh họa:

-- Query SQL 22: Which customers have not placed orders?


SELECT *
FROM Customer
WHERE NOT EXISTS(SELECT Order_Number FROM T_Order
WHERE Customer_ID = Customer.Customer_ID)
*Hình ảnh minh họa:

-- Query SQL 23: Which customers have not placed any orders for "Bàn Ghế"
SELECT Customer_Name
FROM Customer
WHERE Customer_ID not in (SELECT Customer_ID
FROM Product p, Order_Line ol, T_Order o

Home Office System


WHERE (o.Order_Number = ol.Order_Number)
and (ol.Product_ID = p.Product_ID)
and (Product_Description = N'Bàn Ghế'))
*Hình ảnh minh họa:

-- Query SQL 24: What are the order_number for all orders that have included
furniture finished in "Đà Nẵng"
SELECT Order_Number
FROM T_Order
WHERE Order_Number in (SELECT o.Order_Number
FROM Product p, Order_Line ol, T_Order o
WHERE o.Order_Number = ol.Order_Number
and ol.Product_ID = p.Product_ID
and Product_Finish = N'Đà Nẵng')
*Hình ảnh minh họa:

INFORMATION SYSTEM APPLICATIONS – Personal Project 14

-- Query SQL 25: List details about the product with the highest price
SELECT *
FROM Product
WHERE Product_Price = (SELECT MAX(Product_Price) FROM Product)
*Hình ảnh minh họa:

III. Write Procedures


-- Câu 1: Viết thủ tục insert tất cả các bảng
-- Thủ tục nhập dữ liệu cho bảng Customer
GO
CREATE PROC SP_INPUT_CUS
@Customer_ID VARCHAR(20), @Customer_Name NVARCHAR(50), @Customer_Type
VARCHAR(10),
@Customer_Zipcode VARCHAR(10), @Customer_Years INT
AS

Home Office System


IF NOT EXISTS(SELECT Customer_ID FROM Customer WHERE Customer_ID =
@Customer_ID)
BEGIN
INSERT INTO Customer VALUES(@Customer_ID, @Customer_Name,
@Customer_Type, @Customer_Zipcode, @Customer_Years);
PRINT N'Thêm khách hàng thành công';
END
ELSE
PRINT N'Khóa ' + @Customer_ID + N' đã tồn tại.';
EXEC SP_INPUT_CUS'C07',N'Trần Kim Chấn','Vip','15000',3
SELECT*FROM Customer
*Hình ảnh minh họa:

INFORMATION SYSTEM APPLICATIONS – Personal Project 15

-- Thủ tục nhập dữ liệu cho bảng Product_Line


GO
CREATE PROC SP_INPUT_PRO_LINE
@Product_Line_Name NVARCHAR(50), @PL_Prior_Years_Sales_Goal INT,
@PL_Current_Year_Sales_Goal INT
AS
IF NOT EXISTS(SELECT Product_Line_Name FROM Product_Line WHERE
Product_Line_Name = @Product_Line_Name)
BEGIN
INSERT INTO Product_Line VALUES(@Product_Line_Name,
@PL_Prior_Years_Sales_Goal, @PL_Current_Year_Sales_Goal);
PRINT N'Thêm Product Line thành công';
END
ELSE
PRINT N'Khóa ' + @Product_Line_Name + N' đã tồn tại.';
EXEC SP_INPUT_PRO_LINE N'Thép',2000000,1000000
SELECT*FROM Product_Line
*Hình ảnh minh họa:

Home Office System


-- Thủ tục nhập dữ liệu cho bảng T_Order
GO
CREATE PROC SP_INPUT_T_Order
@Order_Number INT, @Order_Placement_Date DATE, @Order_Fulfillment_Date DATE,
@Order_Number_of_Shipments INT, @Customer_ID VARCHAR(20)
AS
IF NOT EXISTS(SELECT Customer_ID FROM Customer WHERE Customer_ID =
@Customer_ID)
PRINT N'Khóa ' + @Customer_ID + N' không tồn tại.';
ELSE
INFORMATION SYSTEM APPLICATIONS – Personal Project
IF NOT EXISTS(SELECT Order_Number FROM T_Order WHERE Order_Number
16
= @Order_Number)
BEGIN
INSERT INTO T_Order VALUES(@Order_Number,
@Order_Placement_Date, @Order_Fulfillment_Date, @Order_Number_of_Shipments,
@Customer_ID);
PRINT N'Thêm Order thành công';
END
ELSE
PRINT N'Khóa ' + CAST(@Order_Number AS VARCHAR) + N' đã tồn
tại.';
EXEC SP_INPUT_T_Order 7,'04/25/2020','04/25/2020',105,'C01'
SELECT*FROM T_Order
*Hình ảnh minh họa:

Home Office System


-- Thủ tục nhập dữ liệu cho bảng Invoice
GO
CREATE PROC SP_INPUT_Invoice
@Invoice_Number INT, @Order_Number INT, @Invoice_Date DATE
AS
IF NOT EXISTS(SELECT Order_Number FROM T_Order WHERE Order_Number =
@Order_Number)
PRINT N'Khóa ' + @Order_Number + N' không tồn tại.';
ELSE
IF NOT EXISTS(SELECT Invoice_Number FROM Invoice WHERE
Invoice_Number = @Invoice_Number)
BEGIN
INSERT INTO Invoice VALUES(@Invoice_Number,
INFORMATION
@Order_Number, SYSTEM APPLICATIONS – Personal Project
@Invoice_Date);
17
PRINT N'Thêm Invoice thành công';
END
ELSE
PRINT N'Khóa ' + @Invoice_Number + N' đã tồn tại.';
EXEC SP_INPUT_Invoice 206,6,'02/22/2020'
SELECT*FROM Invoice
*Hình ảnh minh họa:

-- Thủ tục nhập dữ liệu cho bảng Payment

Home Office System


GO
CREATE PROC SP_INPUT_Payment
@Invoice_Number INT, @Payment_Date DATE, @Payment_Amount INT
AS
IF NOT EXISTS(SELECT Invoice_Number FROM Invoice WHERE Invoice_Number =
@Invoice_Number)
PRINT N'Khóa ' + @Invoice_Number + N' không tồn tại.';
ELSE
IF NOT EXISTS(SELECT Payment_Date FROM Payment WHERE Payment_Date
= @Payment_Date)
BEGIN
INSERT INTO Payment VALUES(@Invoice_Number,
@Payment_Date, @Payment_Amount);
PRINT N'Thêm Payment thành công';
END
ELSE
PRINT CAST(@Payment_Date AS VARCHAR) + N' đã tồn tại.';
EXEC SP_INPUT_Payment 205,'08/23/2020',300000
SELECT*FROM Payment
*Hình ảnh minh họa:

INFORMATION SYSTEM APPLICATIONS – Personal Project 18

-- Thủ tục nhập dữ liệu cho bảng History_Invoice


GO
CREATE PROC SP_INPUT_History_Invoice
@Invoice_Number INT, @Payment_Total INT
AS
IF NOT EXISTS(SELECT Invoice_Number FROM Invoice WHERE Invoice_Number =
@Invoice_Number)
PRINT N'Khóa ' + @Invoice_Number + N' không tồn tại.';
ELSE
BEGIN
INSERT INTO History_Invoice VALUES(@Invoice_Number,
@Payment_Total);

Home Office System


PRINT N'Thêm History_Invoice thành công';
END
EXEC SP_INPUT_History_Invoice 206,200000
SELECT*FROM History_Invoice
*Hình ảnh minh họa:

-- Thủ tục nhập dữ liệu cho bảng Product


GO
CREATE PROC SP_INPUT_Product
INFORMATION
@Product_ID SYSTEM
CHAR(5), APPLICATIONS
@Product_Description – Personal Project
NVARCHAR(100), @Product_Finish
19
NVARCHAR(50),
@Product_Price INT, @Product_Cost INT, @PR_Prior_Year_Sales_Goal INT,
@PR_Current_Year_Sales_Goal INT, @Product_Line_Name NVARCHAR(50)
AS
IF EXISTS(SELECT Product_ID FROM Product WHERE Product_ID =
@Product_ID)
PRINT N'Khóa ' + @Product_ID + N' đã tồn tại.';
ELSE
BEGIN
INSERT INTO Product VALUES(@Product_ID,
@Product_Description, @Product_Finish,
@Product_Price, @Product_Cost,
@PR_Prior_Year_Sales_Goal,@PR_Current_Year_Sales_Goal, @Product_Line_Name);
PRINT N'Thêm Product thành công';
END
EXEC SP_INPUT_Product 'P0006',N'Thép Xây Dựng',N'Long
An',500000,50000,3000000,3000000,N'Thép'
SELECT*FROM Product

*Hình ảnh minh họa:

Home Office System


-- Thủ tục nhập dữ liệu cho bảng Order_Line
GO
CREATE PROC SP_INPUT_Order_Line
@Order_Number INT, @Product_ID CHAR(5), @Order_Quantity INT
AS
BEGIN
IF NOT EXISTS(SELECT Order_Number FROM T_Order WHERE
Order_Number = @Order_Number)
PRINT N'Khóa ' + @Order_Number + N' không tồn tại.';
ELSE
INFORMATION IF NOT EXISTS(SELECT Product_ID FROM Product WHERE
SYSTEM
Product_ID = @Product_ID)
APPLICATIONS – Personal Project 20
PRINT N'Khóa ' + @Product_ID + N' không tồn tại.';
ELSE
BEGIN
INSERT INTO Order_Line VALUES(@Order_Number,
@Product_ID, @Order_Quantity);
PRINT N'Thêm Order Line thành công';
END
END
EXEC SP_INPUT_Order_Line 3,'P0001',2
SELECT*FROM Order_Line
*Hình ảnh minh họa:

Home Office System


-- Câu 2: Viết thủ tục đưa ra thông tin ngày đặt hàng, ngày đáp ứng đơn hàng,
nếu ngày đáp ứng đơn hàng trước 24h sau khi đặt hàng thì ra thông báo đơn
hàng đã được chấp nhận. Ngược lại, đáp ứng đơn hàng chậm thì hệ thống sẽ tự
động hủy đơn.
Input: Mã khách hàng và đơn đặt hàng.
GO
CREATE PROC SP_CHECK
@Customer_ID VARCHAR(20), @Order_Number INT
AS
BEGIN
IF NOT EXISTS(SELECT Order_Number FROM T_Order WHERE
Order_Number = @Order_Number)
PRINT N'Hóa đơn ' + @Order_Number + N' không tồn tại.';
INFORMATIONELSE SYSTEM APPLICATIONS – Personal Project
21
IF NOT EXISTS(SELECT Customer_ID FROM T_Order WHERE
Customer_ID = @Customer_ID)
PRINT N'Khách hàng ' + @Customer_ID + N' không tồn
tại.';
ELSE
BEGIN
DECLARE @A DATE, @B DATE;
SELECT @A = Order_Placement_Date FROM T_Order
WHERE Order_Number = @Order_Number;
SELECT @B = Order_Fulfillment_Date FROM T_Order
WHERE Order_Number = @Order_Number;
IF DATEDIFF(DD,@A,@B) <= 1
PRINT N'Đơn hàng được chấp nhận';
ELSE
BEGIN
PRINT N'Đơn hàng không được chấp
nhận';
DELETE FROM T_Order WHERE
Order_Number = @Order_Number;
END
END
END
*Hình ảnh minh họa:

Home Office System


-- Câu 3: Viết thủ tục hiển thị chi tiết đơn hàng khi nhân viên nhập vào
order number có kiểm tra tồn tại đơn hàng đó hay không
GO
CREATE PROC SP_OUTPUT_ORDER
@Order_Number INT
AS
IF NOT EXISTS (SELECT Order_Number FROM T_Order WHERE Order_Number =
@Order_Number)
INFORMATION SYSTEM
PRINT N'Order ' APPLICATIONS – Personal
+ CAST(@Order_Number Project+ N' không tồn
AS VARCHAR) 22
tại.';
ELSE
SELECT *FROM T_Order WHERE Order_Number = @Order_Number;
EXEC SP_OUTPUT_ORDER 5
*Hình ảnh minh họa:

-- Câu 4: Cho biết thông tin thanh toán của hóa đơn khi người dùng nhập vào
Invoice Number
GO
CREATE PROC SP_OUTPUT_INVOICE
@Invoice_Number INT
AS
BEGIN
IF NOT EXISTS(SELECT Invoice_Number FROM Invoice WHERE
Invoice_Number = @Invoice_Number)
PRINT N'Invoice Number ' + CAST(@Invoice_Number AS VARCHAR)
+ N' không tồn tại.'
ELSE
SELECT I.*, HI.Payment_Total, P.Payment_Amount,
P.Payment_Date FROM Invoice I, Payment P, History_Invoice HI

Home Office System


WHERE (I.Invoice_Number = P.Invoice_Number) AND
(I.Invoice_Number = HI.Invoice_Number) AND (I.Invoice_Number =
@Invoice_Number)
END
EXEC SP_OUTPUT_INVOICE 201
*Hình ảnh minh họa:

-- Câu 5: Cho biết lãi suất bán hàng trong ngày khi người dùng nhập vào
Invoice Date
GO
CREATE PROC SP_OUTPUT_PAYMENT
@Invoice_Date DATE
AS
BEGIN
IF NOT EXISTS(SELECT Invoice_Date FROM Invoice WHERE Invoice_Date
= @Invoice_Date)
PRINT N'Invoice_Date ' + CAST(@Invoice_Date AS VARCHAR) +
N' không tồn tại.'
ELSE
INFORMATION SELECT
SYSTEM APPLICATIONS
Payment_Amount – Personal
AS [LAI Project
SUAT] FROM Payment P, Invoice 23
I
WHERE (I.Invoice_Number = P.Invoice_Number) AND
(I.Invoice_Date = @Invoice_Date)
END
EXEC SP_OUTPUT_PAYMENT '04/26/2020'
SELECT *FROM Payment
*Hình ảnh minh họa:

IV. Write Triggers:

Home Office System


-- Câu 1: Viết Trigger khi nhập dữ liệu cho bảng Invoice thì bảng History
Invoice cũng được Insert dữ liệu, trong đó: PaymentTotal =
Sum(Order_Quantity*Product_Cost)
GO
CREATE TRIGGER TR_INSERT_HISTORY_INVOICE ON Invoice
FOR INSERT
AS
BEGIN
DECLARE @T INT;
SELECT @T = SUM(Order_Quantity*Product_Cost) FROM T_Order O,
Order_Line OL, Product P WHERE ((SELECT Order_Number FROM INSERTED) =
O.Order_Number)
AND (O.Order_Number = OL.Order_Number) AND (OL.Product_ID =
P.Product_ID)
INSERT INTO History_Invoice
VALUES((SELECT Invoice_Number FROM INSERTED), @T);
END
*Hình ảnh minh họa:

Bảng Invoice:

INFORMATION SYSTEM APPLICATIONS – Personal Project 24

Bảng History_Invoice:

Sau khi test:


INSERT INTO Invoice
VALUES(201,1,'02/03/2020');

Home Office System


Bảng Invoice:

Bảng History_Invoice:

-- Câu 2: Viết Trigger khi khách hàng thanh toán tiền(PaymentAmount) thì số
tiền trong Payment_Total cũng sẽ giảm theo
GO
CREATE TRIGGER TR_UPDATE_PAYMENT_TOTAL ON Payment
FOR INSERT
ASINFORMATION SYSTEM APPLICATIONS – Personal Project 25
BEGIN
UPDATE History_Invoice
SET Payment_Total = Payment_Total - (SELECT Payment_Amount FROM
INSERTED)
WHERE Invoice_Number = (SELECT Invoice_Number FROM INSERTED)
END

*Hình ảnh minh họa:


Bảng Payment: Bảng History Invoice:

Home Office System


Sau khi test:
INSERT INTO Payment
VALUES(201,'02/03/2020',150000);
Bảng Payment: Bảng History Invoice:

V. Write Functions:
-- Câu 1: Viết hàm dùng để tính tổng số lượng khách đặt hàng trong ngày. Hiển
thị những ngày có tổng số lượng khách đặt hàng lớn hơn ngày hiện tại(Em dùng
ngày cụ thể để phù hợp với database)
-- Hàm tính tổng số lượng khách đặt hàng trong ngày
GO
CREATE FUNCTION F_LIST_CUSTOMER(@D DATE)
RETURNS INT
ASINFORMATION SYSTEM APPLICATIONS – Personal Project 26
BEGIN
RETURN (SELECT COUNT(Customer_ID) FROM T_Order WHERE
Order_Placement_Date = @D);
END
GO
PRINT DBO.F_LIST_CUSTOMER('01/01/2020')
*Hình ảnh minh họa:

SELECT * FROM T_Order

Home Office System


--Hàm liệt kê những ngày có tổng số lượng khách đặt hàng lớn hơn ngày cho
trước
GO
CREATE FUNCTION F_FIND_CUSTOMER(@D DATE)
RETURNS @KETQUA TABLE(NGAY DATE, SOLUONG INT)
AS
BEGIN
INSERT INTO @KETQUA
SELECT Order_Placement_Date, DBO.F_LIST_CUSTOMER(Order_Placement_Date)
FROM T_Order
WHERE DBO.F_LIST_CUSTOMER(Order_Placement_Date) >
DBO.F_LIST_CUSTOMER(@D)
GROUP BY Order_Placement_Date;
RETURN;
END
GO
SELECT* FROM DBO.F_FIND_CUSTOMER('01/01/2020');
*Hình ảnh minh họa:

-- Câu 2: Viết hàm để xem tổng số đầu mặt hàng cho các nhóm hàng khi người sử
INFORMATION
dụng SYSTEM
nhập vào product APPLICATIONS – Personal Project
line name 27
GO
CREATE FUNCTION F_SUM_PRODUCT(@N NVARCHAR(50))
RETURNS @KETQUA TABLE(NAMEP NVARCHAR(50), SOLUONG INT)
AS
BEGIN
INSERT INTO @KETQUA
SELECT P.Product_Line_Name, COUNT(Product_ID)
FROM Product P, Product_Line PL
WHERE (P.Product_Line_Name = PL.Product_Line_Name) AND
(P.Product_Line_Name = @N)
GROUP BY P.Product_Line_Name
RETURN;
END
*Hình ảnh minh họa:

Home Office System

You might also like