GIỚI THIỆU CHƯƠNG TRÌNH
Giới thiệu
Hiện nay, đời sống người dân ngày càng được cải thiện, dẫn đến sự quan tâm đến sức khỏe trẻ em ngày càng tăng Nhu cầu khám sức khỏe cho trẻ nhỏ ngày càng cao, thúc đẩy sự phát triển của các phòng khám nhi Đồng thời, sự phát triển của công nghệ thông tin cũng làm tăng nhu cầu quản lý các trung tâm khám chữa bệnh trên hệ thống máy tính.
Quản lý dữ liệu trung tâm qua hệ thống công nghệ thông tin mang lại sự thuận tiện cho bệnh nhân, nhân viên và quản lý trong việc theo dõi và giải quyết các vấn đề sức khỏe của trẻ em.
Chương trình phải đảm bảo được các chức năng sau:
- Quản lý nhân viên gắn với chức vụ ở phòng khám
- Quản lý các bệnh nhi đang thăm khám, điều trị tại phòng khám
- Quản lý lịch khám, thiết bị ở phòng khám
- Quản lý viện phí, chi trả lương của phòng khám
1.1.3 Phân công công việc nhóm
TÊN THÀNH VIÊN CÔNG VIỆC Đỗ Văn Quyền – CNTT1 Làm phần danh mục
Lê Duy Dũng - ANHTTT Làm phần Nghiệp vụ
Mạnh Tuấn Đạt – ANHTTT - Tạo form đăng nhập
- Đổi và reset mật khẩu Trần Thị Vân Anh – CNTT1 - Thống kê bao gồm:
- Sao lưu dữ liệu Nguyễn Viết Thông – CNTT2 - Thống kê thuốc
Mô tả hệ thống
Quy trình xử lý tại phòng khám:
- Đăng ký thông tin bệnh nhân tại quầy lễ tân
- Bệnh nhân được chẩn đoán và tư vấn về vấn đề mắc phải bởi Bác sĩ Khám Chữa bệnh
- Bác sĩ khám bệnh đưa ra chẩn đoán và lựa chọn xét nghiệm
Bệnh nhân được khám và thực hiện các xét nghiệm bởi Bác sĩ xét nghiệm Kết quả xét nghiệm sẽ được chuyển cho Bác sĩ Khám bệnh, người sẽ đưa ra kết luận và kê đơn thuốc phù hợp cho bệnh nhân.
- Bệnh nhân thanh toán hóa đơn khám bệnh
Tổng tiền cần thanh toán trong hóa đơn:
Số tiền cần phải thanh toán = Tổng giá các loại dịch vụ bệnh nhân sử dụng + Tổng giá các loại thuốc bệnh nhân mua
- Đón tiếp tất cả bệnh nhân và khách viếng thăm, trực tiếp hoặc qua điện thoại, ân cần và chuyên nghiệp.
Chúng tôi cam kết cung cấp thông tin chính xác cho bệnh nhân về giờ làm việc, dịch vụ, địa điểm, chi phí và thông tin bác sĩ Ngoài ra, chúng tôi cũng sẵn sàng gửi email cho bệnh nhân khi có yêu cầu.
- Nhập thông tin của bệnh nhân vào hệ thống Chuẩn bị hồ sơ bệnh nhân với các biểu mẫu thích hợp Thu phí và chuẩn bị biên lai.
Lắng nghe và phân tích phản hồi từ bệnh nhân là rất quan trọng, vì điều này giúp báo cáo cho Trưởng bộ phận và các phòng ban liên quan Qua đó, chúng ta có thể cải tiến quy trình làm việc, nhằm đảm bảo mang lại sự hài lòng tuyệt đối cho bệnh nhân.
- Bảo vệ bí mật thông tin cá nhân, đảm bảo thông tin y tế được bảo mật ở tất cả các lần bệnh nhân sử dụng dịch vụ.
- Điều phối tất cả các cuộc điện thoại cho Phòng khám; xử lý hệ thống lịch hẹn bệnh nhân, chủ động nhắc nhở bệnh nhân nếu có yêu cầu.
- Hợp tác và liên lạc với tất cả các phòng ban.
- Quản lý khu vực tiếp nhận đảm bảo ngăn nắp và thẩm mỹ.
- Lưu trữ hồ sơ đầy đủ, chính xác, khoa học.
- Thực hiện các nhiệm vụ khác theo sự phân công của Trưởng bộ phận.
- Có trách nhiệm thực hiện tốt bảo quản thuốc”, đảm bảo an toàn của kho.
- Kiểm tra, giám sát chặt chẽ việc xuất, nhập thuốc và báo cáo thường xuyên hoặc đột xuất cho Trưởng khoa về công tác kho và cấp phát.
- Thực hiện một số nhiệm vụ khác khi được phân công.
Dựa trên kế hoạch chung của Phòng khám, việc lập dự trù và kế hoạch mua sắm, thay thế, sửa chữa, thanh lý tài sản và thiết bị y tế sẽ được trình quản lý phê duyệt Sau khi được duyệt, Phòng khám sẽ tổ chức thực hiện cung ứng đầy đủ thiết bị y tế và vật tư tiêu hao theo kế hoạch đã đề ra.
- Tổ chức duy tu, bảo dưỡng thiết bị y tế kịp thời
- Kiểm tra công tác an toàn và vệ sinh lao động; đặc biệt chú ý các loại thiết bị y tế trực tiếp điều trị người bệnh.
- Lập hồ sơ, lý lịch cho tất cả các loại máy, xây dựng quy định vận hành, bảo
- Định kì đánh giá, báo cáo tình hình quản lý và sử dụng vật tư - thiết bị y tế trong Phòng khám, trình quản lý
Dựa vào chế độ, chính sách hiện hành và kế hoạch công tác của Phòng khám, cần lập dự toán ngân sách cũng như kế hoạch thu chi của bệnh viện, sau đó tổ chức thực hiện khi kế hoạch đã được phê duyệt.
- Theo định hướng hạch toán kinh tế trong công tác khám bệnh, chữa bệnh, tổ chức và quản lý chặt chẽ việc thu viện phí theo quy định
Tổ chức công tác kế toán tại Phòng khám bao gồm việc thực hiện chính xác và kịp thời các nghiệp vụ kế toán liên quan đến lao động, tiền lương, chế độ chính sách, vật tư tài sản và hành chính sự nghiệp Đồng thời, cần tổ chức hướng dẫn, kiểm tra và giám sát công tác kế toán cũng như chế độ thu chi của Phòng khám để đảm bảo tính minh bạch và hiệu quả trong quản lý tài chính.
- Định kỳ thực hiện báo cáo quyết toán, tổng kết tài sản, kiểm kê tài sản.
- Tổ chức bảo quản lưu trữ các chứng từ, sổ sách kế toán đúng theo quy định
- Tổ chức tuyên truyền giáo dục sức khoẻ cho mọi người đến khám bệnh tại khoa Không gây phiền hà cho bệnh nhân
Theo dõi và đôn đốc công việc để giảm thời gian chờ đợi của người bệnh là rất quan trọng Cần nghiêm túc thực hiện Quy chế bệnh viện, đặc biệt là quy định về y đức theo lời dạy của Bác Hồ: “Lương y phải như Từ Mẫu” Việc tiếp nhận người bệnh, chẩn đoán, kê đơn, và xử lý cấp cứu cần được thực hiện với tinh thần trách nhiệm cao Đồng thời, lập hồ sơ điều trị ngoại trú, nội trú hoặc giới thiệu người bệnh lên tuyến trên theo quy định là điều cần thiết.
- Kê đơn cho người bệnh phải thực hiện đúng quy chế chẩn đoán bệnh, làm hồ sơ bệnh án và kê đơn điều trị.
- Theo dõi sát sao diễn biến bệnh lí của người bệnh nằm lưu tại khoa để xử lí kịp thời.
- Chăm sóc người bệnh toàn diện theo quy định.
- Thực hiện đúng các kỹ thuật bệnh viện và Quy chế Bệnh viện
Lập kế hoạch mua sắm dụng cụ và vật tư cần thiết cho công tác chăm sóc và phục vụ người bệnh, đồng thời kiểm tra việc sử dụng và bảo quản các trang thiết bị này theo đúng quy định.
- Kiểm tra công tác vệ sinh, chống nhiễm khuẩn tại các buồng bệnh và các khoa.
- Định kì sơ kết, tổng kết công tác chăm sóc người bệnh toàn diện, báo cáo người quản lý.
Quản lý ngân sách của Phòng khám một cách hiệu quả, kiểm soát chặt chẽ việc thu chi, và thường xuyên kiểm tra công tác kế toán là những biện pháp quan trọng nhằm ngăn chặn thất thu, tham ô và lãng phí.
- Căn cứ kế hoạch của ngành và nhiệm vụ của Phòng khám, xây dựng kế hoạch dài hạn về phát triển Phòng khám
- Hỗ trợ kỹ thuật chuyên môn cho tuyến dưới.
- Thực hiện tốt các quy định của pháp luật về lao động và công tác bảo hộ lao động.
- Mỏ rộng hợp tác trong và ngoài nước nhằm phát triển mọi nguồn lực của Phòng khám.
Đặc tả chức năng cần xây dựng
1.3.1 Chức năng quản lý bệnh nhân
- Lưu được lịch sử khám bệnh và thông tin khách hàng
- Lưu lịch hẹn khám của bệnh nhân
1.3.2 Chức năng của Bác sĩ
- Đưa ra chẩn đoán, lựa chọn xét nghiệm, kê đơn cho bệnh nhân
- Tiến hành xét nghiệm cho bệnh nhân
1.3.3 Chức năng tạo và tự hoàn thành hóa đơn cho bệnh nhân
- Lấy dữ liệu từ CSDL bệnh nhân tự động điền vào hóa đơn
- Tự động cập nhật hóa đơn sau khi thêm các dịch vụ và thuốc bệnh nhân sử dụng
- Liên kết với pdf để in ra hóa đơn cho khách hàng
1.3.4 Chức năng dành cho Admin
Admin có thể theo dõi hoạt động của bệnh xá trong một khoảng thời gian nhất định, bao gồm việc xem lại các hóa đơn khám bệnh, thông tin về nhân viên và khách hàng, tình trạng thuốc hiện có, cũng như tình trạng thiết bị y tế.
- Admin có thể Reset lại tài khoản cho Nhân viên
CÁC MÔ HÌNH QUAN HỆ
Mô tả hệ thống dưới dạng mối quan hệ dữ liệu
Đối tượng quản lý: Quản lý phòng khám nhi
Phòng khám được tổ chức thành nhiều bộ phận, mỗi bộ phận bao gồm nhiều nhân viên Mỗi nhân viên trong phòng khám đều có một mã nhân viên riêng biệt, giúp quản lý và theo dõi hiệu quả công việc.
Thông tin nhân viên bao gồm họ và tên, ngày sinh, giới tính, địa chỉ, số điện thoại, số CMND, trình độ, chức vụ, ngày vào làm, ảnh nhân viên, tên đăng nhập và mật khẩu đăng nhập.
Bệnh nhân khi đến Phòng khám hoặc đặt lịch khám trực tuyến cần khai báo thông tin cá nhân cho phòng khám Mỗi bệnh nhân sẽ có các thuộc tính bao gồm: Mã Bệnh nhân, Tên Bệnh nhân, Giới tính, Ngày sinh, Tên người thân, Số CMND của người thân, Địa chỉ và Số điện thoại liên hệ.
Nhân viên y tế chịu trách nhiệm tạo Phiếu khám cho Bệnh nhân, trong đó hồ sơ bệnh án bao gồm các thông tin quan trọng như Mã phiếu khám, Mã bệnh nhân, Mã nhân viên, Lí do khám bệnh, Chuẩn đoán và Ngày làm phiếu.
Sau khi bác sĩ tạo phiếu khám và thực hiện kiểm tra sơ bộ, họ sẽ xác định bệnh lý cho bệnh nhân Tiếp theo, bác sĩ sẽ giới thiệu danh sách các xét nghiệm cần thiết để chẩn đoán chính xác tình trạng bệnh Danh mục xét nghiệm này bao gồm các thông tin quan trọng như Mã xét nghiệm, Tên xét nghiệm và Đơn giá.
Khi bác sĩ tư vấn cho bệnh nhân về việc lựa chọn xét nghiệm, họ sẽ tiến hành tạo phiếu xét nghiệm tương ứng Mỗi bệnh nhân sẽ nhận được một phiếu xét nghiệm riêng biệt, phù hợp với dịch vụ mà họ đã sử dụng Phiếu xét nghiệm này bao gồm các thông tin quan trọng như Mã phiếu xét nghiệm, Mã phiếu khám và Kết quả xét nghiệm.
Mỗi bệnh nhân sẽ nhận được một phiếu xét nghiệm duy nhất, kèm theo một hoặc nhiều phiếu sử dụng xét nghiệm tương ứng với số lượng xét nghiệm mà họ đã thực hiện Mỗi phiếu sử dụng xét nghiệm bao gồm các thông tin quan trọng như Mã phiếu xét nghiệm, Mã xét nghiệm, nội dung xét nghiệm, và ảnh kết quả xét nghiệm sau khi bệnh nhân đã hoàn tất quá trình khám.
Sau khi bệnh nhân được điều trị, họ sẽ nhận được tư vấn về phương pháp chữa trị và đơn thuốc Mỗi bệnh nhân có thể được kê nhiều loại thuốc khác nhau, với mỗi loại thuốc đều có các thuộc tính riêng, bao gồm mã thuốc.
Thuốc, Mã loại thuốc, Tên Thuốc, Giá Thuốc, Dạng bào chế, Thành phần, Cách sử dụng, Ảnh Thuốc, Số lượng còn lại trong kho.
Sau khi được kê đơn, mỗi bệnh nhân sẽ nhận một hoặc nhiều phiếu đơn thuốc chi tiết Mỗi phiếu này bao gồm các thuộc tính như mã đơn, mã thuốc, số lượng bán và cách sử dụng Tất cả các phiếu chi tiết sẽ được tổng hợp trong phiếu đơn thuốc, với các thuộc tính như mã đơn và mã phiếu khám.
Hệ thống cho phép nhân viên truy cập vào các chức năng khác nhau dựa trên chức vụ của họ thông qua tài khoản đăng nhập cá nhân.
- Quản lý có thể thông qua hệ thống để biết thống kê doanh thu, tình trạng khám chữa bệnh của Phòng khám, đồng thời tính lương cho Nhân viên.
Chuyển đổi mô hình liên kết thực thể sang mô hình quan hệ
* Các quy tắc chuyển đổi:
- Quy tắc 1: Với kiểu liên kết 1:n
Chuyển khóa chính của LĐQH bên 1 (cha) sang làm khóa ngoại của LĐQH bên nhiều (con).
- Quy tắc 2: Với kiểu liên kết n:n
Chuyển đổi mối liên kết thành một Lớp Đối Tượng Quan Hệ (LĐQH) với các thuộc tính của mối liên kết, đồng thời bổ sung các thuộc tính khóa chính từ các LĐQH liên quan Khóa chính của LĐQH mới sẽ bao gồm các thuộc tính mới được thêm vào.
- Quy tắc 3: Với kiểu liên kết 1:1
+ Cách 1: Chuyển khóa chính của LĐQH này sang làm khóa ngoại của LĐQH kia hoặc ngược lại.
+ Cách 2: Nhập 2 kiểu thực thể và mối liên kết thành 1 LĐQH, chọn khóa chính cho phù hợp.
Chuẩn hóa cơ sở dữ liệu
2.4.1 Vẽ mô hình quan hệ
NhanVien (MaNV, TenNV, NS, GT, DC, DThoai, CMND, ChucVu, TrinhDo, NgayVaoLam, Anh, TenDangNhap, MatKhau)
Bảng dữ liệu thuộc 1NF vì các thuộc tính chỉ chứa giá trị đơn, không thể phân chia, và mỗi giá trị thuộc tính là một giá trị đơn được lấy từ miền giá trị tương ứng.
+ Thuộc 2NF vì thỏa mãn 1NF, không tồn tại phụ thuộc hàm vào một phần của khóa nên không vi phạm 2NF
+ Thuộc 3NF vì thỏa mãn 2NF, không có phụ thuộc hàm có nguồn là thuộc tính không khóa, đích là thuộc tính không khóa
+ Thuộc BCNF vì thỏa mãn 3NF, không có thuộc tính nào phụ thuộc hàm vào thuộc tính không khóa
Bảng này thuộc dạng 1NF vì mỗi thuộc tính chỉ chứa giá trị đơn, không thể phân chia và giá trị của từng thuộc tính được lấy từ miền giá trị của nó.
+ Thuộc 2NF vì thỏa mãn 1NF, không tồn tại phụ thuộc hàm vào một phần của khóa nên không vi phạm 2NF
+ Thuộc 3NF vì thỏa mãn 2NF, không có phụ thuộc hàm có nguồn là thuộc tính không khóa, đích là thuộc tính không khóa
+ Thuộc BCNF vì thỏa mãn 3NF, không có thuộc tính nào phụ thuộc hàm vào thuộc tính không khóa
Thuoc (MaThuoc, MaLoaiThuoc, TenThuoc, GiaThuoc, DangBaoChe,
Bảng dữ liệu thuộc 1NF khi các thuộc tính chỉ chứa giá trị đơn, không thể phân chia, và mỗi giá trị của thuộc tính đều được lấy từ miền giá trị của nó.
+ Thuộc 2NF vì thỏa mãn 1NF, không tồn tại phụ thuộc hàm vào một phần của khóa nên không vi phạm 2NF
+ Thuộc 3NF vì thỏa mãn 2NF, không có phụ thuộc hàm có nguồn là thuộc tính không khóa, đích là thuộc tính không khóa
+ Thuộc BCNF vì thỏa mãn 3NF, không có thuộc tính nào phụ thuộc hàm vào thuộc tính không khóa
BenhNhan (MaBN, TenBN, GT, NS, TenNguoiThan, CMND_nguoithan, DC, SDT)
Bảng dữ liệu thuộc 1NF khi miền giá trị của các thuộc tính chỉ chứa giá trị đơn, không thể phân chia và mỗi thuộc tính mang giá trị đơn từ miền giá trị của nó.
+ Thuộc 2NF vì thỏa mãn 1NF, không tồn tại phụ thuộc hàm vào một phần của khóa nên không vi phạm 2NF
+ Thuộc 3NF vì thỏa mãn 2NF, không có phụ thuộc hàm có nguồn là thuộc tính không khóa, đích là thuộc tính không khóa
+ Thuộc BCNF vì thỏa mãn 3NF, không có thuộc tính nào phụ thuộc hàm vào thuộc tính không khóa
Mô hình quan hệ các bảng:
1 NhanVien( MaNV, TenNV, NS, GT, DC, DThoai, CMND, TenChucVu,
TrinhDo, NgayVaoLam, Anh, TenDangNhap, MatKhau)
3 Thuoc( MaThuoc, MaLoaiThuoc, TenThuoc, GiaThuoc, CachSD,
4 ChiTietDonThuoc( MaDon, MaThuoc, SoLuongBan, CachSuDung)
9 BenhNhan( MaBN, TenBN, GT, NS, TenNguoiThan, CMND_nguoithan, DC, SDT)
10 PhieuKham(MaPhieuKham, MaBenhNhan, MaNhanVien, LyDoKhamBenh,ChuanDoan, NgayLamPhieu)
Đặc tả các bảng
Chúng ta có tổng cộng 10 bảng là: NhanVien, BenhNhan, Thuoc, LoaiThuoc, ChiTietDonThuoc, DonThuoc, PhieuKham, DanhMucXetNghiem,
SuDungXetNghiem, PhieuXetNghiem. Đặc tả các bảng như sau:
Trường Kiểu Index NULL Chú thích
MaNhanVien Char(3) PRIMARY NO Mã Nhân viên
TenNhanVien Nvarchar(30) Tên Nhân viên
TenChucVu Nvarchar(20) Tên Chức vụ
NgayVaoLam Date Ngày vào làm
AnhNhanVien Image Ảnh Nhân Viên
TenDangNhap Varchar(32) Tên Đăng Nhập
MaBenhNhan Char(6) PRIMARY NO Mã Bệnh nhân
TenBenhNhan Nvarchar(30) Tên Bệnh nhân
TenNguoiThan Nvarchar(30) Tên người thân
CMNDNguoiThan Char(10) CMND người thân
Trường Kiểu Index NULL Chú thích
MaXetNghiem Char(2) PRIMARY NO Mã xét nghiệm
TenXetNghiem Nvarchar(30) Tên xét nghiệm
MaPhieuXetNghiem Char(8) FOREIGN NO Mã Phiếu Xét
Nghiệm MaXetNghiem Char(2) FOREIGN NO Mã xét nghiệm
NoiDungXetNghiem nvarchar(300) Nội dung xét nghiệm
MaPhieuXetNghiem Char(8) FOREIGN NO Mã Phiếu Xét
Nghiệm MaPhieuKham Char(8) FOREIGN NO Mã phiếu khám
Trường Kiểu Index NULL Chú thích
MaPhieuKham Char(8) PRIMARY NO Mã Phiếu Khám MaBenhNhan Char(6) FOREIGN NO Mã bệnh nhân MaNhanVien Char(3) FOREIGN NO Mã nhân viên
LyDoKhamBenh Nvarchar(150) Lý do khám bệnh
NgayLamPhieu date Ngày làm phiếu
Trường Kiểu Index NULL Chú thích
MaLoaiThuoc Char(2) PRIMARY NO Mã loại thuốc
TenLoaiThuoc Nvarchar((30) Tên loại thuốc
Trường Kiểu Index NULL Chú thích
MaThuoc Char(4) PRIMARY NO Mã Thuốc
MaLoaiThuoc Char(2) FOREIGN NO Mã loại thuốc
DangBaoChe Nvarchar(10) Dạng bào chế
SoLuongTrongKho Int Số lượng trong kho
CachSuDung Nvarchar(150) Cách sử dụng
Trường Kiểu Index NULL Chú thích
MaDon Char(8) FOREIGN NO Mã đơn
MaThuoc Char(4) FOREIGN NO Mã thuốc
SoLuongBan int Số lượng bán
CachSuDung Nvarchar(200) Cách sử dụng
Trường Kiểu Index NULL Chú thích
MaDon Char(8) PRIMARY NO Mã đơn
MaPhieuKham Char(8) FOREIGN NO Mã phiếu khám
KHAI THÁC CƠ SỞ DỮ LIỆU
Khai thác đại số quan hệ
3.1.1 Trần Thị Vân Anh – CNTT1
1 Lấy ra tên nhân viên và tuổi nhân viên đó từ bảng nhân viên
2 .Lấy tên nhân viên có tuổi lớn hơn 21
3 Đưa ra tên nhân viên có địa chỉ ở Ha Noi
( DiaChi like ‘Hà Nội” NhanVien )
4 Đưa ra danh sách nhân viên có cùng chức vụ Bác sĩ
5 Đưa ra danh sách nhân viên đã được gom nhóm theo tên chức vụ
6 Đưa ra số lượng nhân viên có cùng loại chức vụ
7 Đưa ra số lượng nhân viên có tuổi trên 21
8 Lấy tên và số điện thoại của nhân viên
9 Tính số lượng các chức vụ của phòng khám
10 Đưa ra danh sách số trình độ và số lượng nhân viên thuộc trình độ đó
11 đưa ra chức vụ có nhiều nhân viên nhất
12 đưa ra chức vụ có ít nhân viên nhất
13 đưa ra trình độ có nhiều nhân viên nhất
14 Đưa ra trình độ có ít nhân viên nhất
15 Đưa ra nhân viên nhỏ tuổi nhất
16 Đưa ra nhân viên có tuổi lớn nhất
17 Sắp xếp các nhân viên có tuổi tăng dần
18 Đưa ra số lượng nhân viên và số tuổi
19 Đưa ra số lượng nhân viên và giới tính
20 Đưa ra tên nhân viên và thời gian làm việc
1 Đưa ra tên các danh mục xét nghiệm enXN ( )
2 Đưa ra giá của mục kiểm tra mắt
TenXN = N’Kiểm tra mắt’ ( DanhMucXN ))
3 Đưa ra thông tin của mục mã xét nghiệm 01
4 Đưa ra thông số lượng các dịch vụ phòng khám enXN ( )
5 Đưa ra dịch vụ xét nghiệm có giá lớn nhất enX ( ( DonGia ( ) ( ))
6 Đưa ra dịch vụ xét nghiệm có giá nhỏ nhất enX ( ( ( ) ( ))
7 Đưa ra trung bình giá xét nghiệm
8 Sắp xếp tên xét nghiệm theo giá tăng dần enX , N DonGia ( )
9 Đưa ra xét nghiệm có giá trên 30.00 enXN ( 30.00 ( ))
10 Toàn bộ thông tin của bảng Danh Mục Xét Nghiệm
11 Toàn bộ thông tin của bảng Sử Dụng Xét Nghiệm
12 Đếm số danh mục xét nghiệm đã sử dụng
13 Đưa ra các phiếu sử dụng mã xét nghiệm 03
14 Thông tin của mã phiếu xét nghiệm 20000806
15 Các phiếu xét nghiệm chưa có ảnh
16 Đưa ra toàn bộ thông tin của bảng Phiếu Xét Nghiệm
17 Đếm số Phiếu Xét Nghiệm đã sử dụng
18 Các phiếu có kết quả gãy tay
KetQua = N‘Gãy Tay’ ( Ph ieuX ) N )
19 Thông tin của mã phiếu xét nghiệm 20094312
20 Thông tin của mã phiếu có mã chứa chữ số 3
1 Đưa ra tên những bệnh nhân là nam mà có tuổi lớn hơn 8 nhỏ hơn 11
Tuoi >8 and Tuoi 21
3 Đưa ra tên nhân viên có địa chỉ ở Ha Noi
SELECT TenNhanVien FROM dbo.NhanVien WHERE DiaChi like '%Hà Nội%'
4 Đưa ra danh sách nhân viên có cùng chức vụ Bác sĩ
SELECT *FROM dbo.NhanVien WHERE TenChucVu = 'Bác sĩ'
5 Đưa ra danh sách nhân viên đã được gom nhóm theo tên chức vụ
SELECT TenNhanVien FROM dbo.NhanVien GROUP BY TenChucVu
6 Đưa ra số lượng nhân viên có cùng loại chức vụ
SELECT TenChucVu, COUNT(*) FROM dbo.NhanVien GROUP BY TenChucVu
7 Đưa ra số lượng nhân viên có tuổi trên 21
SELECT COUNT(*) FROM dbo.NhanVien WHERE (YEAR(GETDATE()) -
8 Lấy tên và số điện thoại của nhân viên
SELECT TenNhanVien, DienThoai FROM dbo.NhanVien
9 Tính số lượng các chức vụ của phòng khám
SELECT COUNT(DISTINCT TenChucVu ) FROM dbo.NhanVien
10 Đưa ra danh sách số trình độ và số lượng nhân viên thuộc trình độ đó
SELECT TrinhDo,COUNT(*) FROM dbo.NhanVien GROUP BY TrinhDo
11 đưa ra chức vụ có nhiều nhân viên nhất
SELECT SLCV.TenChucVu,SLCV.SL FROM (SELECT TenChucVu,COUNT(*)
AS SL FROM dbo.NhanVien GROUP BY TenChucVu) AS SLCV WHERE
SLCV.SL = (SELECT MAX(CV.SL) FROM (SELECT TenChucVu,COUNT(*) AS
SL FROM dbo.NhanVien GROUP BY TenChucVu) AS CV)
12.đưa ra chức vụ có ít nhân viên nhất
SELECT SLCV.TenChucVu,SLCV.SL FROM (SELECT TenChucVu,COUNT(*)
AS SL FROM dbo.NhanVien GROUP BY TenChucVu) AS SLCV WHERE
SLCV.SL = (SELECT MIN(CV.SL) FROM (SELECT TenChucVu,COUNT(*) AS
SL FROM dbo.NhanVien GROUP BY TenChucVu) AS CV)
13 đưa ra trình độ có nhiều nhân viên nhất
The SQL query retrieves the educational levels (TrinhDo) and their corresponding counts (SL) from the employee table (NhanVien) It groups the data by educational level and filters the results to display only those levels with the highest count of employees This allows for a clear understanding of which educational qualifications are most prevalent among the staff.
14 Đưa ra trình độ có ít nhân viên nhất
The SQL query retrieves the educational qualifications (TrinhDo) and their corresponding counts (SL) from the NhanVien table It groups the results by the educational qualifications and filters to display only those qualifications that have the minimum count of employees This allows for an analysis of the least represented educational levels within the employee dataset.
15 Đưa ra nhân viên nhỏ tuổi nhất
SELECT NV.TenNhanVien ,(YEAR(GETDATE()) - YEAR(NV.NgaySinh)) FROM dbo.NhanVien AS NV WHERE (YEAR(GETDATE()) - YEAR(NV.NgaySinh)) (SELECT MIN( YEAR(GETDATE()) - YEAR(NgaySinh)) FROM dbo.NhanVien)
16 Đưa ra nhân viên có tuổi lớn nhất
SELECT TenNhanVien FROM dbo.NhanVien AS NV WHERE
(YEAR(GETDATE()) - YEAR(NV.NgaySinh)) = (SELECT MAX(
YEAR(GETDATE()) - YEAR(NgaySinh)) FROM dbo.NhanVien)
17 Sắp xếp các nhân viên có tuổi tăng dần
SELECT TenNhanVien ,(YEAR(GETDATE()) - YEAR(NgaySinh)) AS tuoi FROM dbo.NhanVien ORDER BY (YEAR(GETDATE()) - YEAR(NgaySinh))
18 Đưa ra số lượng nhân viên và số tuổi
SELECT (YEAR(GETDATE()) - YEAR(NgaySinh)) AS tuoi , COUNT(*) AS SoLuong FROM dbo.NhanVien GROUP BY (YEAR(GETDATE()) -
19 Đưa ra số lượng nhân viên và giới tính
SELECT GioiTinh, COUNT(*) AS SoLuong FROM dbo.NhanVien GROUP BY GioiTinh
20 Đưa ra tên nhân viên và thời gian làm việc
SELECT TenNhanVien, (YEAR(GETDATE()) - YEAR(NgayVaoLam)) FROM dbo.NhanVien b Truy vấn nâng cao
1 Đưa ra tên bệnh nhân và tên nhân viên thực hiện
SELECT BN.TenBenhNhan, NV.TenNhanVien
FROM dbo.BenhNhan AS BN, dbo.NhanVien AS NV , dbo.PhieuKham AS PK
WHERE BN.MaBenhNhan = PK.MaBenhNhan AND PK.MaNhanVien NV.MaNhanVien
2 Đưa ra số lượng bệnh nhân mà một nhân viên khám
SELECT NV.TenNhanVien , PK.SL AS 'Số lượng bệnh nhân' FROM dbo.NhanVien
AS NV , ( SELECT MaNhanVien,COUNT(*) AS SL FROM dbo.PhieuKham
GROUP BY MaNhanVien) AS PK
WHERE NV.MaNhanVien = PK.MaNhanVien
3 Đưa ra nhân viên có số lượng bệnh nhân đã khám là nhiều nhất
SELECT NV.TenNhanVien , PK.SL FROM dbo.NhanVien AS NV, ( SELECT
MaNhanVien,COUNT(*) AS SL FROM dbo.PhieuKham GROUP BY MaNhanVien)
WHERE NV.MaNhanVien = PK.MaNhanVien AND PK.SL = (SELECT
MAX(PK1.SL) FROM ( SELECT MaNhanVien,COUNT(*) AS SL FROM dbo.PhieuKham GROUP BY MaNhanVien) AS PK1)
4 Đưa ra tên bệnh nhân, tên nhân viên , chuẩn đoán bệnh cho bệnh nhân
SELECT BN.TenBenhNhan, NV.TenNhanVien, PK.ChanDoan FROM dbo.NhanVien AS NV, dbo.BenhNhan AS BN, dbo.PhieuKham AS PK
WHERE NV.MaNhanVien = PK.MaNhanVien AND BN.MaBenhNhan PK.MaBenhNhan
5 Đưa ra tên bệnh nhân, tên nhân viên, tên xét nghiệm bệnh nhân sử dụng
SELECT BN.TenBenhNhan, NV.TenNhanVien,
FROM dbo.NhanVien AS NV, dbo.BenhNhan AS BN, dbo.PhieuKham AS PK, dbo.PhieuXetNghiem AS PXN, dbo.DanhMucXetNghiem AS DMXN, dbo.SuDungXetNghiem AS SDXN
WHERE NV.MaNhanVien = PK.MaNhanVien AND BN.MaBenhNhan PK.MaPhieuKham AND PK.MaPhieuKham = PXN.MaPhieuKham AND
PXN.MaPhieuXetNghiem = SDXN.MaPhieuXN AND SDXN.MaXetNghiem DMXN.MaXetNgiem
6 Đưa ra tên bệnh nhân, tên nhân viên, nội dung cần xét nghiệm
SELECT BN.TenBenhNhan, NV.TenNhanVien, SDXN.NoiDungXetNghiem
FROM dbo.NhanVien AS NV, dbo.BenhNhan AS BN, dbo.PhieuKham AS PK, dbo.PhieuXetNghiem AS PXN, dbo.SuDungXetNghiem AS SDXN
WHERE NV.MaNhanVien = PK.MaNhanVien AND BN.MaBenhNhan PK.MaPhieuKham AND PK.MaPhieuKham = PXN.MaPhieuKham AND
7 Đưa ra tên bệnh nhân, tên nhân viên, danh sách thuốc bệnh nhân cần mua
SELECT BN.TenBenhNhan, NV.TenNhanVien, T.TenThuoc, CT.SoLuongBan
FROM dbo.BenhNhan AS BN, dbo.NhanVien AS NV, dbo.PhieuKham AS PK, dbo.DonThuoc AS DT, dbo.ChiTietDonThuoc AS CT, dbo.Thuoc AS T
WHERE BN.MaBenhNhan = PK.MaBenhNhan AND PK.MaNhanVien NV.MaNhanVien
AND PK.MaPhieuKham = DT.MaPhieuKham AND DT.MaDon = CT.MaDon
8 Đưa ra tên bệnh nhân, tên nhân viên khám và kết quả của xét nghiệm
SELECT BN.TenBenhNhan, NV.TenNhanVien, PXN.KetQua
FROM dbo.BenhNhan AS BN, dbo.NhanVien AS NV, dbo.PhieuKham AS PK, dbo.PhieuXetNghiem AS PXN
WHERE BN.MaBenhNhan = PK.MaBenhNhan AND NV.MaNhanVien PK.MaNhanVien
AND PK.MaPhieuKham = PXN.MaPhieuKham
9 Đưa ra hoá đơn của bệnh nhân cho việc xét nghiệm
SELECT BN.TenBenhNhan , DM.TenXetNghiem, DM.DonGia
FROM dbo.BenhNhan AS BN, dbo.PhieuKham AS PK, dbo.PhieuXetNghiem AS PXN, dbo.SuDungXetNghiem AS SD, dbo.DanhMucXetNghiem AS DM
WHERE BN.MaBenhNhan = PK.MaBenhNhan AND PK.MaPhieuKham PXN.MaPhieuKham
AND PXN.MaPhieuXetNghiem = SD.MaPhieuXN AND SD.MaXetNghiem DM.MaXetNgiem
10 Đưa ra hoá đơn thuốc của bệnh nhân
SELECT DISTINCT BN.TenBenhNhan, (T.GiaThuoc * CT.SoLuongBan) AS
FROM dbo.BenhNhan AS BN, dbo.PhieuKham AS PK, dbo.DonThuoc AS DT, dbo.ChiTietDonThuoc AS CT, dbo.Thuoc AS T
WHERE BN.MaBenhNhan = PK.MaBenhNhan AND PK.MaPhieuKham DT.MaPhieuKham
AND DT.MaDon = CT.MaDon AND CT.MaThuoc = T.MaThuoc
3.2.2 Đỗ Văn Quyền – CNTT1 a Truy vấn cơ bản
1 Đưa ra tên các danh mục xét nghiệm
SELECT TenXetNghiem FROM dbo.DanhMucXetNghiem
2 Đưa ra giá của mục kiểm tra mắt
SELECT DonGia FROM dbo.DanhMucXetNghiem WHERE TenXetNghiem N'Kiểm Tra Mắt'
3 Đưa ra thông tin của mục mã xét nghiệm 01 Đưa ra thông tin của mục mã xét nghiệm 01
4 Đưa ra thông số lượng các dịch vụ phòng khám
SELECT COUNT(TenXetNghiem) FROM dbo.DanhMucXetNghiem
5 Đưa ra dịch vụ xét nghiệm có giá lớn nhất
SELECT TenXetNghiem FROM dbo.DanhMucXetNghiem WHERE DonGia (SELECT MAX(DonGia) FROM dbo.DanhMucXetNghiem)
6 Đưa ra dịch vụ xét nghiệm có giá nhỏ nhất
SELECT TenXetNghiem FROM dbo.DanhMucXetNghiem WHERE DonGia (SELECT Min(DonGia) FROM dbo.DanhMucXetNghiem)
7 Đưa ra trung bình giá xét nghiệm
SELECT AVG(DonGia) FROM dbo.DanhMucXetNghiem
8 Sắp xếp tên xét nghiệm theo giá tăng dần
SELECT TenXetNghiem FROM dbo.DanhMucXetNghiem ORDER BY DonGia DESC
9 Đưa ra xét nghiệm có giá trên 30.00
SELECT TenXetNghiem FROM dbo.DanhMucXetNghiem WHERE DonGia > 30.00
10 Toàn bộ thông tin của bảng Danh Mục Xét Nghiệm
11 Toàn bộ thông tin của bảng Sử Dụng Xét Nghiệm
12 Đếm số danh mục xét nghiệm đã sử dụng
SELECT COUNT(MaPhieuXN) FROM dbo.SuDungXetNghiem
13 Đưa ra các phiếu sử dụng mã xét nghiệm 03
SELECT MaPhieuXN FROM dbo.SuDungXetNghiem WHERE MaXetNghiem = '03'
14 Thông tin của mã phiếu xét nghiệm 20000806
SELECT * FROM dbo.SuDungXetNghiem WHERE MaPhieuXN = '20000806'
15 Các phiếu xét nghiệm chưa có ảnh
SELECT MaPhieuXN FROM dbo.SuDungXetNghiem WHERE Anh IS NULL
16 Đưa ra toàn bộ thông tin của bảng Phiếu Xét Nghiệm
17 Đếm số Phiếu Xét Nghiệm đã sử dụng
SELECT COUNT(MaPhieuXetNghiem) FROM dbo.PhieuXetNghiem
18 Các phiếu có kết quả gãy tay
SELECT MaPhieuXetNghiem FROM dbo.PhieuXetNghiem WHERE KetQua N'gãy tay'
19 Thông tin của mã phiếu xét nghiệm 20094312
SELECT * FROM dbo.PhieuXetNghiem WHERE MaPhieuXetNghiem = '20094312'
20 Thông tin của mã phiếu có mã chứa chữ số 3
SELECT * FROM dbo.PhieuXetNghiem WHERE MaPhieuXetNghiem LIKE '%3%' b Truy vấn nâng cao
1 Đưa ra tên xét nghiệm và giá của phiếu xét nghiệm 20000806 đã dùng
SELECT DMXN.TenXetNghiem,DMXN.DonGia FROM dbo.DanhMucXetNghiem
WHERE DMXN.MaXetNgiem = (SELECT SDXN.MaXetNghiem FROM dbo.SuDungXetNghiem AS SDXN WHERE SDXN.MaPhieuXN = '20000806')
2 Tổng tiền mà phiếu xét nghiệm 20000806 phải trả
SELECT SUM (Gia.DonGia) AS TongTien
FROM (SELECT DMXN.TenXetNghiem,DMXN.DonGia FROM dbo.DanhMucXetNghiem AS DMXN
WHERE DMXN.MaXetNgiem = (SELECT SDXN.MaXetNghiem FROM dbo.SuDungXetNghiem AS SDXN WHERE SDXN.MaPhieuXN = '20000806')) AS Gia
3 Các Phiếu Xét Nghiệm đã dùng kiểm tra sức khỏe
FROM dbo.PhieuXetNghiem AS PXN JOIN dbo.SuDungXetNghiem AS SDXN on
WHERE SDXN.MaXetNghiem IN (SELECT MaXetNgiem FROM dbo.DanhMucXetNghiem WHERE TenXetNghiem = N'tâm lý' )
4 Các phiếu sử dụng xét nghiệm có giá cao nhất
SELECT MaPhieuXN FROM dbo.SuDungXetNghiem
WHERE MaXetNghiem IN (SELECT MaXetNgiem FROM dbo.DanhMucXetNghiem WHERE DonGia = (SELECT MAX(DonGia) FROM dbo.DanhMucXetNghiem) )
5 Tổng tiền các phiếu xét nghiệm phải trả
SELECT Gia.MaPhieuXetNghiem, SUM(Gia.Gia)
DMXN.TenXetNghiem,DMXN.DonGia AS Gia FROM dbo.DanhMucXetNghiem
AS DMXN,dbo.SuDungXetNghiem AS SDXN,dbo.PhieuXetNghiem AS PXN
WHERE DMXN.MaXetNgiem = SDXN.MaXetNghiem AND
PXN.MaPhieuXetNghiem= SDXN.MaPhieuXN) AS Gia
6 Phiếu xét nghiệm có tổng tiền nhỏ nhất
SELECT MIN (Tim.mi) AS Gia
SELECT SUM(Gia.Gia) AS Mi
FROM (SELECT PXN.MaPhieuXetNghiem AS PXN1,
DMXN.TenXetNghiem,DMXN.DonGia AS Gia FROM dbo.DanhMucXetNghiem
AS DMXN,dbo.SuDungXetNghiem AS SDXN,dbo.PhieuXetNghiem AS PXN
WHERE DMXN.MaXetNgiem = SDXN.MaXetNghiem AND
PXN.MaPhieuXetNghiem= SDXN.MaPhieuXN) AS Gia
GROUP BY Gia.PXN1) AS Tim
7 Tên xét nghiệm và giá các phiếu xét nghiệm đã dùng
SELECT PXN.MaPhieuXetNghiem, DMXN.TenXetNghiem,DMXN.DonGia
FROM dbo.DanhMucXetNghiem AS DMXN,dbo.SuDungXetNghiem AS
SDXN,dbo.PhieuXetNghiem AS PXN
WHERE DMXN.MaXetNgiem = SDXN.MaXetNghiem AND
8 Phiếu xét nghiệm có tổng tiền lớn nhất
SELECT MAX(Tim.mi) AS Gia
SELECT SUM(Gia.Gia) AS Mi
DMXN.TenXetNghiem,DMXN.DonGia AS Gia FROM dbo.DanhMucXetNghiem
AS DMXN,dbo.SuDungXetNghiem AS SDXN,dbo.PhieuXetNghiem AS PXN
WHERE DMXN.MaXetNgiem = SDXN.MaXetNghiem AND
PXN.MaPhieuXetNghiem= SDXN.MaPhieuXN) AS Gia
GROUP BY Gia.MaPhieuXetNghiem) AS Tim
9 Mã Xét nghiệm được sử dụng nhiều nhất
SELECT pk.MaXetNghiem,Pk.SL
FROM (SELECT MaXetNghiem,Count(*) AS SL FROM dbo.SuDungXetNghiem GROUP BY MaXetNghiem) AS PK
WHERE PK.Sl = (SELECT MAX(PK1.SL) FROM ( SELECT
MaXetNghiem,Count(*) AS SL FROM dbo.SuDungXetNghiem GROUP BY
10 Mã Xét nghiệm được sử dụng ít nhất
SELECT pk.MaXetNghiem,Pk.SL
FROM (SELECT MaXetNghiem,Count(*) AS SL FROM dbo.SuDungXetNghiem GROUP BY MaXetNghiem) AS PK
WHERE PK.Sl = (SELECT MIN(PK1.SL) FROM ( SELECT
MaXetNghiem,Count(*) AS SL FROM dbo.SuDungXetNghiem GROUP BY MaXetNghiem) AS PK1)
3.2.3 Nguyễn Viết Thông – CNTT2 a Truy vấn cơ bản
1 Đưa ra tên những bệnh nhân là nam mà có tuổi lớn hơn 8 nhỏ hơn 11
SELECT TenBenhNhan FROM dbo.BenhNhan WHERE (YEAR(GETDATE())- YEAR(NgaySinh)) > 8 AND (YEAR(GETDATE())-YEAR(NgaySinh)) < 11 AND GioiTinh = 1
2 Đưa ra mã bệnh nhân và tên những bệnh nhân có địa chỉ ở Hải Dương
SELECT MaBenhNhan, TenBenhNhan FROM dbo.BenhNhan WHERE DiaChi LIKE '%Hải Dương%'
3 Đưa ra số lượng bệnh nhân có tuổi lớn hơn 10
SELECT COUNT(*) FROM dbo.BenhNhan WHERE (YEAR(GETDATE())-
4 Điều chỉnh giá xét nghiệm máu tăng thêm 20
UPDATE dbo.DanhMucXetNghiem SET DonGia += 20 WHERE TenXetNghiem 'Xét nghiệm máu'
5 Đưa ra số lần xét nghiệm X-quang tim phổi
SELECT COUNT(*) FROM dbo.SuDungXetNghiem WHERE MaXetNghiem (SELECT MaXetNgiem FROM dbo.DanhMucXetNghiem WHERE
6 Đưa ra Nội dung các xét nghiệm có Ảnh
SELECT NoiDungXetNghiem FROM dbo.SuDungXetNghiem WHERE Anh IS NOT NULL
7 Đưa ra danh sách chức vụ và số lượng nhân viên thuộc chức vụ đó
SELECT TenChucVu,COUNT(*) FROM dbo.NhanVien GROUP BY TenChucVu
8 Đưa ra trình độ và số lượng mà nhiều nhân viên ở trình độ đó nhất
SELECT slTD.TrinhDo, slTD.sl FROM
(SELECT TrinhDo,COUNT(*) AS sl FROM dbo.NhanVien GROUP BY TrinhDo) AS slTD
WHERE slTD.sl = (SELECT MAX(TD.sl) FROM (SELECT COUNT(*) AS sl FROM dbo.NhanVien GROUP BY TrinhDo) AS TD)
9 Đưa ra nội dung của mã phiếu xét nghiệm '20000806'
SELECT NoiDungXetNghiem,Anh FROM dbo.SuDungXetNghiem WHERE
10 Đưa ra trình độ có ít người nhất
SELECT soluongTrinhDo.TrinhDo, soluongTrinhDo.soluong FROM
(SELECT TrinhDo,COUNT(*) AS soluong FROM dbo.NhanVien GROUP BY TrinhDo) AS soluongTrinhDo
WHERE soluongTrinhDo.soluong = (SELECT MIN(TD.soluong) FROM (SELECT COUNT(*) AS soluong FROM dbo.NhanVien GROUP BY
11 Đưa ra nhân viên tuổi nghề ít nhất
SELECT TenNhanVien, TenChucVu , (YEAR(GETDATE()) -
YEAR(NgayVaoLam)) AS namLV FROM dbo.NhanVien
WHERE (YEAR(GETDATE()) - YEAR(NgayVaoLam)) = (SELECT
MIN((YEAR(GETDATE()) - YEAR(NgayVaoLam))) FROM dbo.NhanVien)
12 Đưa ra số tuổi trung bình của nhân viên
SELECT AVG(YEAR(GETDATE())-YEAR(NgaySinh)) FROM dbo.NhanVien
13 Đưa ra tuổi nghề trung bình của Nhân viên là nam
SELECT AVG(YEAR(GETDATE())-YEAR(NgaySinh)) FROM dbo.NhanVien WHERE GioiTinh = 1
14 Các phiếu có kết quả gãy tay
SELECT MaPhieuXetNghiem, MaPhieuKham FROM dbo.PhieuXetNghiem WHERE KetQua = N'gãy chân'
15 Đưa ra số lượng các xét nghiệm có sô lượng tăng dần
SELECT MaXetNghiem,COUNT(*) AS sl FROM dbo.SuDungXetNghiem GROUP
BY MaXetNghiem ORDER BY sl ASC
16 Đưa ra các phiếu, nội dung xét nghiệm sử dụng mã xét nghiệm '01'
SELECT MaPhieuXN,NoiDungXetNghiem FROM dbo.SuDungXetNghiem WHERE MaXetNghiem = '01'
17 Đưa ra thuốc còn nhiều trong kho nhất
SELECT TenThuoc FROM dbo.Thuoc WHERE SoLuongThuocTrongKho (SELECT MAX(SoLuongThuocTrongKho) FROM dbo.Thuoc)
18 Đưa ra tên thuốc có chứa 'siro'
SELECT TenThuoc FROM dbo.Thuoc WHERE TenThuoc LIKE '%siro%'
19 Đưa ra tên thuốc, giá thuốc có chưa thành phần nước, đường
SELECT TenThuoc, GiaThuoc FROM dbo.Thuoc WHERE ThanhPhan LIKE '%nước
20 Đưa ra phiếu khám có mã là '00000806'
SELECT MaPhieuKham,MaBenhNhan FROM dbo.PhieuKham WHERE
MaPhieuKham = '00000806' b Truy vấn nâng cao
1 Đưa ra trình độ nhân viên có ít người nhất
SELECT soluongTrinhDo.TrinhDo, soluongTrinhDo.soluong FROM
(SELECT TrinhDo,COUNT(*) AS soluong FROM dbo.NhanVien GROUP BY TrinhDo) AS soluongTrinhDo
WHERE soluongTrinhDo.soluong = (SELECT MIN(trinhdo.soluong) FROM
(SELECT COUNT(*) AS soluong FROM dbo.NhanVien GROUP BY TrinhDo) AS trinhdo)
2 Đưa ra tên Xét nghiệm, đơn giá, số lượng được sử dụng nhiều nhất trong Phiếu sử dụng xét nghiệm
SELECT DM.TenXetNghiem, DM.DonGia, SoLuong.soluong FROM dbo.DanhMucXetNghiem AS DM,
( SELECT pk.MaXetNghiem AS mxn,Pk.SL AS soluong FROM
( SELECT MaXetNghiem,COUNT(*) AS SL FROM dbo.SuDungXetNghiem
GROUP BY MaXetNghiem) AS PK WHERE PK.Sl ( SELECT MAX(PK1.SL) FROM
( SELECT COUNT(*) AS SL FROM dbo.SuDungXetNghiem GROUP BY
MaXetNghiem) AS PK1 ) ) AS SoLuong WHERE DM.MaXetNgiem= SoLuong.mxn
3 Đưa ra Nhân viên bán thuocs nhiều hơn lượng thuốc trung bình bán cho Bệnh nhân
SELECT NV.MaNhanVien,NV.TenNhanVien FROM dbo.NhanVien AS NV
( SELECT PK.MaNhanVien FROM dbo.PhieuKham AS PK WHERE
( SELECT DT.MaPhieuKham FROM dbo.DonThuoc AS DT WHERE DT.MaDon
( SELECT don.madon FROM ( SELECT CTDT.MaDon AS madon,SUM(CTDT.SoLuongBan) AS slban FROM dbo.ChiTietDonThuoc AS
CTDT GROUP BY CTDT.MaDon ) AS don,
( SELECT TongThuoc.Tong/TongDon.Tong AS trungbinh FROM
( SELECT COUNT(CTDT2.MaDon) AS Tong FROM (SELECT DISTINCT
CTDT1.MaDon FROM dbo.ChiTietDonThuoc AS CTDT1) AS CTDT2) AS
( SELECT SUM(CTDT.SoLuongBan) AS Tong FROM dbo.ChiTietDonThuoc AS CTDT) AS TongThuoc ) AS thuoc
WHERE don.slban > thuoc.trungbinh)))
4 Đưa ra nhân viên tuổi nghề dưới 16 năm mà tham gia vào trên 2 phiếu khám
SELECT TenNhanVien, TenChucVu , (YEAR(GETDATE()) -
YEAR(NgayVaoLam)) AS namLV FROM dbo.NhanVien AS NV WHERE
(( SELECT DISTINCT MaNhanVien FROM dbo.PhieuKham AS PK,
( SELECT MaNhanVien AS mnv,COUNT(*) AS soluong FROM dbo.PhieuKham GROUP BY MaNhanVien) AS SOLUONG
WHERE SOLUONG.mnv = PK.MaNhanVien AND SOLUONG.soluong > 2)
(SELECT DISTINCT MaNhanVien FROM dbo.NhanVien WHERE
5 Đưa ra loại thuốc được bán nhiều nhất
SELECT MaLoaiThuoc, TenLoaiThuoc FROM dbo.LoaiThuoc WHERE
( SELECT MaLoaiThuoc FROM dbo.Thuoc WHERE MaThuoc IN
( SELECT MaThuoc AS mt,SUM(SoLuongBan) AS _sum FROM dbo.ChiTietDonThuoc GROUP BY MaThuoc) AS soluong1 WHERE soluong1. [_sum] ( SELECT MAX(soluong.[_sum]) AS _max FROM
( SELECT SUM(SoLuongBan) AS _sum FROM dbo.ChiTietDonThuoc GROUP BY MaThuoc) AS soluong)))
6 Đưa ra những bệnh nhân sử dụng thuốc bán chạy nhất ở trên
SELECT MaBenhNhan, TenBenhNhan,TenNguoiThan FROM dbo.BenhNhan
( SELECT MaBenhNhan FROM dbo.PhieuKham WHERE MaPhieuKham IN
( SELECT MaPhieuKham FROM dbo.DonThuoc WHERE MaDon IN
( SELECT MaDon FROM dbo.ChiTietDonThuoc WHERE MaThuoc IN
( SELECT MaThuoc AS mt,SUM(SoLuongBan) AS _sum FROM dbo.ChiTietDonThuoc GROUP BY MaThuoc) AS soluong1 WHERE soluong1. [_sum] ( SELECT MAX(soluong.[_sum]) AS _max FROM
( SELECT SUM(SoLuongBan) AS _sum FROM dbo.ChiTietDonThuoc GROUP BY MaThuoc) AS soluong)))))
7 Đưa ra tên Bệnh nhân, tên nhân viên, kết quả khám, mã thuốc sử dụng
SELECT BN.TenBenhNhan, NV.TenNhanVien, PXN.KetQua, T.TenThuoc
FROM dbo.BenhNhan AS BN, dbo.NhanVien AS NV, dbo.PhieuKham AS PK, dbo.PhieuXetNghiem AS PXN, dbo.DonThuoc AS DT, dbo.ChiTietDonThuoc AS CTDT, dbo.Thuoc AS T
WHERE BN.MaBenhNhan = PK.MaBenhNhan AND NV.MaNhanVien PK.MaNhanVien
AND PK.MaPhieuKham = PXN.MaPhieuKham AND PK.MaPhieuKham DT.MaPhieuKham AND DT.MaDon = CTDT.MaDon
8 Đưa ra Bệnh nhân có mã 000007 sử dụng những thuốc gì
SELECT DISTINCT LayRa.ma,LayRa.ten AS 'Tên bệnh nhân',LayRa.thuoc AS 'Sử dụng' FROM
( SELECT BN.MaBenhNhan AS ma, BN.TenBenhNhan AS ten,T.TenThuoc AS thuoc
FROM dbo.BenhNhan AS BN, dbo.NhanVien AS NV, dbo.PhieuKham AS PK, dbo.PhieuXetNghiem AS PXN, dbo.DonThuoc AS DT, dbo.ChiTietDonThuoc AS CTDT, dbo.Thuoc AS T
WHERE BN.MaBenhNhan = PK.MaBenhNhan AND NV.MaNhanVien PK.MaNhanVien
AND PK.MaPhieuKham = PXN.MaPhieuKham AND PK.MaPhieuKham DT.MaPhieuKham AND DT.MaDon = CTDT.MaDon
AND T.MaThuoc = CTDT.MaThuoc) AS LayRa
9 Đưa ra 2 nhân viên khám cho nhiều bệnh nhân nhất, số lượng
SELECT TOP 2 NV.TenNhanVien AS ten, PK.SL AS 'Số lượng' FROM dbo.NhanVien AS NV ,
( SELECT MaNhanVien,COUNT(*) AS SL FROM dbo.PhieuKham GROUP BY MaNhanVien) AS PK
WHERE NV.MaNhanVien = PK.MaNhanVien ORDER BY PK.SL DESC
10 Đưa ra tên xét nghiệm được sử dụng nhiều nhất
SELECT DM.TenXetNghiem,Pk.SL
FROM dbo.DanhMucXetNghiem AS DM,(SELECT MaXetNghiem,COUNT(*) AS
SL FROM dbo.SuDungXetNghiem GROUP BY MaXetNghiem) AS PK
WHERE PK.Sl = (SELECT MAX(PK1.SL) FROM ( SELECT
MaXetNghiem,COUNT(*) AS SL FROM dbo.SuDungXetNghiem GROUP
BY MaXetNghiem) AS PK1 ) AND DM.MaXetNgiem = pk.MaXetNghiem
3.2.4 Lê Duy Dũng – ANHTTT a Truy vấn cơ bản
SELECT TenBenhNhan, (YEAR(GETDATE()) - YEAR(NgaySinh)) AS tuoi FROM dbo.BenhNhan
2 Đưa ra tên các bệnh nhân theo độ tuổi giảm dần
SELECT TenBenhNhan FROM dbo.BenhNhan ORDER BY (YEAR(GETDATE()) - YEAR(NgaySinh)) DESC
3 Đưa ra thông tin của bệnh nhân có mã 000001
SELECT *FROM dbo.BenhNhan WHERE MaBenhNhan = '000001'
4 Đưa ra bệnh nhân có tuổi nhỏ nhất
SELECT TenBenhNhan FROM dbo.BenhNhan WHERE YEAR(NgaySinh) (SELECT MAX(YEAR(NgaySinh)) FROM dbo.BenhNhan)
5 Đưa ra bệnh nhân có tuổi lớn nhất
SELECT TenBenhNhan FROM dbo.BenhNhan WHERE YEAR(NgaySinh) (SELECT MIN(YEAR(NgaySinh)) FROM dbo.BenhNhan)
6 Đưa ra độ tuổi trung bình của bệnh nhân
SELECT AVG(YEAR(GETDATE()) - YEAR(NgaySinh)) FROM dbo.BenhNhan
7 Đưa ra số lượng bệnh nhân và giới tính
SELECT GioiTinh, COUNT(*) AS SoLuong FROM dbo.BenhNhan GROUP BY GioiTinh
8 Đưa ra số lượng bệnh nhân và tuổi
SELECT (YEAR(GETDATE()) - YEAR(NgaySinh)) AS tuoi , COUNT(*) AS SoLuong FROM dbo.BenhNhan GROUP BY (YEAR(GETDATE()) -
9 Sắp xếp các bệnh nhân có tuổi tăng dần
SELECT TenBenhNhan ,(YEAR(GETDATE()) - YEAR(NgaySinh)) AS tuoi
FROM dbo.BenhNhan ORDER BY (YEAR(GETDATE()) - YEAR(NgaySinh))
10 Đưa ra bệnh nhân có tuổi lớn hơn 8
SELECT COUNT(*) FROM dbo.BenhNhan WHERE (YEAR(GETDATE()) -
11 Đưa ra bệnh nhân có mã bênh nhân chứa số 1
SELECT * FROM dbo.BenhNhan WHERE MaBenhNhan LIKE '%1%'
12 Đưa ra bệnh nhân sinh trong tháng 10
SELECT * FROM dbo.BenhNhan WHERE MONTH(NgaySinh) = 10
13 Đưa ra bệnh nhân được chẩn đoán là gãy tay
SELECT TenBenhNhan FROM dbo.BenhNhan WHERE MaBenhNhan IN (SELECT MaBenhNhan FROM dbo.PhieuKham WHERE ChanDoan LIKE '%gãy tay%')
14 Đưa ra bệnh nhân được chữa trị bởi bác sĩ có mã 303
SELECT TenBenhNhan FROM dbo.BenhNhan WHERE MaBenhNhan IN (SELECT MaBenhNhan FROM dbo.PhieuKham WHERE MaNhanVien LIKE '%303%')
15 Đưa ra bệnh nhân được chữa trị trong năm 2020
SELECT TenBenhNhan FROM dbo.BenhNhan WHERE MaBenhNhan IN (SELECT MaBenhNhan FROM dbo.PhieuKham WHERE YEAR(NgayLamPhieu) = 2020)
16 Đếm số bệnh nhân được chữa trị trong năm 2020
SELECT COUNT(*) FROM dbo.PhieuKham WHERE YEAR(NgayLamPhieu) 2020
17 Đưa ra thông tin bệnh nhân có phiếu khám 03260314
SELECT * FROM dbo.BenhNhan WHERE MaBenhNhan IN (SELECT
MaBenhNhan FROM dbo.PhieuKham WHERE MaPhieuKham LIKE '03260314')
18 Đưa ra danh sách các bệnh nhân nam
SELECT TenBenhNhan FROM dbo.BenhNhan WHERE GioiTinh = 1
19 Đếm số bệnh nhân nữ
SELECT COUNT(*) FROM dbo.BenhNhan WHERE GioiTinh = 0
20 Đếm số bệnh nhân được chữa trị bởi bác sĩ Đỗ Văn Quyền
SELECT COUNT(*) FROM dbo.PhieuKham WHERE MaNhanVien = (SELECT MaNhanVien FROM dbo.NhanVien WHERE TenNhanVien LIKE N'Đỗ Văn
Quyền') b Truy vấn nâng cao
1 đưa ra chi phí khám chữa bệnh của bệnh nhân gồm chi phí xét nghiệm và chi phí
SELECT SD.MaPhieuXN, SUM(DM.DonGia) AS gia FROM dbo.SuDungXetNghiem AS SD , dbo.DanhMucXetNghiem AS DM WHERE
SD.MaXetNghiem = DM.MaXetNgiem GROUP BY SD.MaPhieuXN
2 chi phí làm xét nghiệm
SELECT BN.TenBenhNhan,TongTien.gia
FROM dbo.PhieuXetNghiem AS PXN , dbo.BenhNhan AS BN, dbo.PhieuKham AS
PK, (SELECT SD.MaPhieuXN, SUM(DM.DonGia) AS gia FROM dbo.SuDungXetNghiem AS SD , dbo.DanhMucXetNghiem AS DM WHERE
SD.MaXetNghiem = DM.MaXetNgiem GROUP BY SD.MaPhieuXN) AS TongTien
WHERE PXN.MaPhieuXetNghiem = TongTien.MaPhieuXN AND
PXN.MaPhieuKham = PK.MaPhieuKham AND PK.MaBenhNhan BN.MaBenhNhan
SELECT BN.TenBenhNhan, TongTienThuoc.giaThuoc
The query retrieves data from the tables dbo.BenhNhan (patients), dbo.DonThuoc (prescriptions), and dbo.PhieuKham (medical records) It includes a subquery that calculates the total medication cost by summing the prices from the dbo.Thuoc (medications) table, grouped by prescription ID from the dbo.ChiTietDonThuoc (prescription details) table.
WHERE TongTienThuoc.MaDon = DT.MaDon AND PK.MaPhieuKham DT.MaPhieuKham AND BN.MaBenhNhan = PK.MaBenhNhan
4 đưa ra chi phí xét nghiệm lớn nhất bệnh nhân phải trả
The SQL query retrieves the maximum total price of laboratory tests by joining the "PhieuXetNghiem" and "PhieuKham" tables, while calculating the sum of individual test prices from the "SuDungXetNghiem" and "DanhMucXetNghiem" tables It does this by grouping the results based on the test request identifier, ensuring that the highest total amount is returned for analysis.
WHERE PXN.MaPhieuXetNghiem = TongTien.MaPhieuXN AND
5 đưa ra chi phí xét nghiệm nhỏ nhất
The SQL query retrieves the minimum value of the total cost from medical examination records by joining the "PhieuXetNghiem" and "PhieuKham" tables It calculates the total price for each examination by summing the unit prices from the "DanhMucXetNghiem" table, grouped by the examination request ID This allows for an efficient assessment of the lowest examination cost available in the dataset.
WHERE PXN.MaPhieuXetNghiem = TongTien.MaPhieuXN AND
6 đưa ra bệnh nhân có chi phí khám lớn nhất
The SQL query retrieves the maximum total price from laboratory test invoices by joining the "PhieuXetNghiem" and "PhieuKham" tables with a subquery that calculates the sum of prices for each test invoice from the "SuDungXetNghiem" and "DanhMucXetNghiem" tables The final result is stored in the variable @gia.
WHERE PXN.MaPhieuXetNghiem = TongTien.MaPhieuXN AND
SELECT BN.TenBenhNhan,TongTien.gia
FROM dbo.PhieuXetNghiem AS PXN , dbo.BenhNhan AS BN, dbo.PhieuKham AS
PK, (SELECT SD.MaPhieuXN, SUM(DM.DonGia) AS gia FROM dbo.SuDungXetNghiem AS SD , dbo.DanhMucXetNghiem AS DM WHERE
SD.MaXetNghiem = DM.MaXetNgiem GROUP BY SD.MaPhieuXN) AS TongTien
WHERE PXN.MaPhieuXetNghiem = TongTien.MaPhieuXN AND
PXN.MaPhieuKham = PK.MaPhieuKham AND PK.MaBenhNhan BN.MaBenhNhan AND TongTien.gia = @gia
7 đưa ra bệnh nhân có chi phí khám là nhỏ nhất
The SQL query calculates the minimum value of the total cost associated with medical test requests by joining the tables for test requests and examinations It aggregates the prices from the test usage records and the test catalog, ultimately returning the lowest total cost from these calculations.
WHERE PXN.MaPhieuXetNghiem = TongTien.MaPhieuXN AND
SELECT BN.TenBenhNhan,TongTien.gia
FROM dbo.PhieuXetNghiem AS PXN , dbo.BenhNhan AS BN, dbo.PhieuKham AS
PK, (SELECT SD.MaPhieuXN, SUM(DM.DonGia) AS gia FROM dbo.SuDungXetNghiem AS SD , dbo.DanhMucXetNghiem AS DM WHERE
SD.MaXetNghiem = DM.MaXetNgiem GROUP BY SD.MaPhieuXN) AS TongTien
WHERE PXN.MaPhieuXetNghiem = TongTien.MaPhieuXN AND
PXN.MaPhieuKham = PK.MaPhieuKham AND PK.MaBenhNhan BN.MaBenhNhan AND TongTien.gia = @gia
8 Đưa ra trình độ có ít người nhất
SELECT soluongTrinhDo.TrinhDo, soluongTrinhDo.soluong FROM
(SELECT TrinhDo,COUNT(*) AS soluong FROM dbo.NhanVien GROUP BY TrinhDo) AS soluongTrinhDo
WHERE soluongTrinhDo.soluong = (SELECT MIN(TD.soluong) FROM (SELECT COUNT(*) AS soluong FROM dbo.NhanVien GROUP BY
9 Đưa ra tên bệnh nhân, tên nhân viên khám và kết quả của xét nghiệm
SELECT BN.TenBenhNhan, NV.TenNhanVien, PXN.KetQua
FROM dbo.BenhNhan AS BN, dbo.NhanVien AS NV, dbo.PhieuKham AS PK, dbo.PhieuXetNghiem AS PXN
WHERE BN.MaBenhNhan = PK.MaBenhNhan AND NV.MaNhanVien PK.MaNhanVien
AND PK.MaPhieuKham = PXN.MaPhieuKham
10 Tổng tiền các phiếu xét nghiệm phải trả
SELECT Gia.MaPhieuXetNghiem, SUM(Gia.Gia)
DMXN.TenXetNghiem,DMXN.DonGia AS Gia FROM dbo.DanhMucXetNghiem
AS DMXN,dbo.SuDungXetNghiem AS SDXN,dbo.PhieuXetNghiem AS PXN
WHERE DMXN.MaXetNgiem = SDXN.MaXetNghiem AND
PXN.MaPhieuXetNghiem= SDXN.MaPhieuXN) AS Gia
3.2.5 Mạnh Tuấn Đạt – ANHTTT a Truy vấn cơ bản
1 lấy ra tên thuốc và giá thuốc từ bảng thuốc
SELECT TenThuoc, GiaThuoc FROM dbo.Thuoc
2 lấy ra thuốc có dạng bào chế là dạng siro
SELECT TenThuoc FROM dbo.Thuoc WHERE DangBaoChe LIKE 'siro'
3 đưa ra số lượng thuốc có giá trên 5.00
SELECT COUNT(*) FROM dbo.Thuoc WHERE GiaThuoc > 5
4 thông tin của thuốc có mã chứa chữ số 3
SELECT * FROM dbo.Thuoc WHERE MaThuoc LIKE '%3%'
5 tính số lượng mã loại thuốc
SELECT COUNT(DISTINCT MaLoaiThuoc) FROM dbo.Thuoc
6 sắp sếp thuốc có giá tăng dần
SELECT TenThuoc, GiaThuoc FROM dbo.Thuoc ORDER BY GiaThuoc
7 đưa ra thuốc có giá cao nhất
SELECT TenThuoc FROM dbo.Thuoc WHERE GiaThuoc = (SELECT
MAX(GiaThuoc) FROM dbo.Thuoc)
8 đưa ra thuốc có giá thấp nhất
SELECT TenThuoc FROM dbo.Thuoc WHERE GiaThuoc = (SELECT
MIN(GiaThuoc) FROM dbo.Thuoc)
9 đưa ra thuốc có số lượng trong kho còn nhiều nhất
SELECT SLMLT.MaLoaiThuoc ,SLMLT.SL FROM (SELECT
MaLoaiThuoc,COUNT(*) FROM dbo.Thuoc GROUP BY MaLoaiThuoc) AS
SLMLT WHERE SLMLT.SL = (SELECT MAX (MLT.SL) FROM (SELECT
MaLoaiThuoc, COUNT(*) AS SL FROM dbo.Thuoc GROUP BY MaLoaiThuoc) AS MLT)
10 đưa ra danh sách thuốc đã được gom nhóm theo mã loại thuốc
SELECT TenThuoc FROM dbo.Thuoc GROUP BY DangBaoChe
11 đưa ra thuốc có số lượng trong kho ít nhất
SELECT TenThuoc FROM dbo.Thuoc WHERE SoLuongThuocTrongKho (SELECT MIN(SoLuongThuocTrongKho) FROM dbo.Thuoc)
12 đưa ra số lượng thuốc của các dạng bào chế
SELECT DangBaoChe, COUNT(*) AS SoLuong FROM dbo.Thuoc GROUP BY
13 đưa ra mã loại thuốc và số lượng
SELECT MaLoaiThuoc, COUNT(*) AS SoLuong FROM dbo.Thuoc GROUP BY MaLoaiThuoc
14 đưa ra toàn bộ thông tin thuốc
15 đưa ra giá của thuốc Calcium
SELECT GiaThuoc FROM dbo.Thuoc WHERE TenThuoc = 'Calcium'
16 đưa ra thuốc có số lượng còn nhiều trong kho nhất
SELECT TenThuoc FROM dbo.Thuoc WHERE SoLuongThuocTrongKho (SELECT MAX(SoLuongThuocTrongKho) FROM dbo.Thuoc)
17 sắp sếp số lượng thuốc trong kho
SELECT TenThuoc ,SoLuongThuocTrongKho FROM dbo.Thuoc ORDER BY
18 đưa ra trung bình giá thuốc
SELECT AVG(GiaThuoc) FROM dbo.Thuoc
19 thông tin của thuốc có mã thuốc 0153
SELECT * FROM dbo.Thuoc WHERE MaThuoc = '0153'
20 thông tin của thuốc có thành phần hoạt chất chính là Oseltamivir
SELECT * FROM dbo.Thuoc WHERE ThanhPhan = N'hoạt chất chính là Oseltamivir' b Truy vấn nâng cao
1 đưa ra tên thuốc và giá thuốc của các thuốc có tên loại thuốc là Cúm
SELECT T.TenThuoc , T.GiaThuoc FROM dbo.Thuoc AS T
WHERE T.MaLoaiThuoc = (SELECT LT.MaLoaiThuoc FROM dbo.LoaiThuoc AS
LT WHERE LT.TenLoaiThuoc = 'Cúm')
2 đưa ra tên thuốc và giá thuốc có số lượng bán cao nhất
SELECT T.TenThuoc , T.GiaThuoc FROM dbo.Thuoc AS T WHERE T.MaThuoc
IN (SELECT MaThuoc FROM dbo.ChiTietDonThuoc WHERE SoLuongBan (SELECT MAX(SoLuongBan) FROM dbo.ChiTietDonThuoc ))
3 đưa ra mã thuốc và cách sử dụng của thuốc có số lượng nhiều trong kho nhất
SELECT CTDT.MaThuoc , CTDT.CachSuDung FROM dbo.ChiTietDonThuoc AS CTDT WHERE CTDT.MaThuoc
IN (SELECT MaThuoc FROM dbo.Thuoc WHERE SoLuongThuocTrongKho (SELECT MAX(SoLuongThuocTrongKho) FROM dbo.Thuoc ))
4 mã loại thuốc có số lượng bán ra ít nhất
SELECT pk.MaLoaiThuoc ,pk.SL
FROM (SELECT MaLoaiThuoc,Count(*) AS SL FROM dbo.LoaiThuoc GROUP
WHERE PK.Sl = (SELECT MAX(PK1.SL) FROM ( SELECT
PK.MaLoaiThuoc,Count(*) AS SL FROM dbo.LoaiThuoc GROUP BY
5 đưa ra số lượng bán, mã đơn, mã thuốc
SELECT DT.MaDon, CTDT.MaThuoc , CTDT.SoLuongBan
FROM dbo.ChiTietDonThuoc AS CTDT,dbo.DonThuoc AS DT
WHERE DT.MaDon = CTDT.MaDon
6 đưa ra tên thuốc và giá thuốc có số lượng bán thấp nhất
SELECT T.TenThuoc , T.GiaThuoc FROM dbo.Thuoc AS T WHERE T.MaThuoc
IN (SELECT MaThuoc FROM dbo.ChiTietDonThuoc WHERE SoLuongBan (SELECT MIN(SoLuongBan) FROM dbo.ChiTietDonThuoc ))
7 đưa ra mã thuốc và cách sử dụng của thuốc có số lượng nhiều trong kho nhất
SELECT CTDT.MaThuoc , CTDT.CachSuDung FROM dbo.ChiTietDonThuoc AS CTDT WHERE CTDT.MaThuoc
IN (SELECT MaThuoc FROM dbo.Thuoc WHERE SoLuongThuocTrongKho (SELECT MAX(SoLuongThuocTrongKho) FROM dbo.Thuoc ))
8 mã loại thuốc có số lượng bán ra nhiều nhất
SELECT pk.MaLoaiThuoc ,pk.SL
FROM (SELECT MaLoaiThuoc,Count(*) AS SL FROM dbo.LoaiThuoc GROUP
WHERE PK.Sl = (SELECT MIN(PK1.SL) FROM ( SELECT
PK.MaLoaiThuoc,Count(*) AS SL FROM dbo.LoaiThuoc GROUP BY
9 tên loại thuốc có số lượng bán ra ít nhất
SELECT pk.TenLoaiThuoc,pk.SL
FROM (SELECT TenLoaiThuoc,Count(*) AS SL FROM dbo.LoaiThuoc GROUP
WHERE PK.Sl = (SELECT MAX(PK1.SL) FROM ( SELECT
PK.TenLoaiThuoc,Count(*) AS SL FROM dbo.LoaiThuoc GROUP BY
10 đưa ra tên thuốc và giá thuốc của các thuốc có số lượng bán ra là 2
SELECT T.TenThuoc , T.GiaThuoc FROM dbo.Thuoc AS T WHERE T.MaThuoc
IN (SELECT MaThuoc FROM dbo.ChiTietDonThuoc WHERE SoLuongBan
Khai thác bằng ngôn ngữ T-SQL
3.3.1 Trần Thị Vân Anh – CNTT1
1 Tạo Function tính tổng doanh thu phòng khám trong một khoản thời gian.
Biến đầu vào : @BatDau, @KetThuc là thời gian bắt đầu tính và thời gian kết thúc truy vấn
Kết quả đầu ra: NgayThang, DoanhThu
CREATE FUNCTION [dbo].[UF_TongDoanhThuPhongKham](@BatDau date, @KetThuc date) RETURNS @TongDoanhThu TABLE (NgayThang date , DoanhThu money )
WHEN XN.NgayLamXetNghiem IS NULL THEN T.NgayLamPhieu
WHEN T.NgayLamPhieu IS NULL THEN XN.NgayLamXetNghiem
WHEN XN.NgayLamXetNghiem IS NULL THEN T.TongTien
WHEN T.NgayLamPhieu IS NULL THEN XN.TongTien
FROM (SELECT NgayLamXetnghiem,SUM(DonGia) AS TongTien FROM
UF_DanhSachXetNghiemTrongMotThoiGian (@BatDau,@KetThuc) GROUP BY
( SELECT NgayLamPhieu, SUM(GiaThuoc*SoLuongBan) AS TongTien FROM
UF_DanhSachLuongThuocBanTrongMotThoiGian(@BatDau,@KetThuc) GROUP BY NgayLamPhieu )AS T
2 Sử dụng Cursor tạo bảng lấy ra danh sách bệnh nhân khám trong ngày hôm nay. Kết quả đưa ra sẽ là bảng danh sách các bệnh nhân khám trong ngày hiện tại gồm các thuộc tính: MaBenhNhan, TenBenhNhan, GioiTinh, DiaChi, TenNguoiThan, DienThoai
CREATE TABLE DanhSachBenhNhan (MaBenhNhan CHAR (6), TenBenhNhan nvarchar(30), GioiTinh bit, DiaChi nvarchar(150), TenNguoiThan nvarchar(30), DienThoai CHAR(10))
DECLARE @ma CHAR (6) , @tenBN nvarchar(30), @GT bit , @DC NVARCHAR(150), @tenNT
DECLARE BN_Cursor CURSOR FORWARD_ONLY FOR SELECT BN.MaBenhNhan, TenBenhNhan, GioiTinh, DiaChi, TenNguoiThan, DienThoaiNguoiThan FROM dbo.BenhNhan AS BN, dbo.PhieuKham WHERE
FETCH NEXT FROM BN_Cursor
INTO @ma, @tenBN, @GT, @DC, @tenNT, @DT
3 Tạo Function tính tổng doanh thu phòng khám chi tiết: tổng doanh thu, doanh thu thuốc, doanh thu xét nghiệm.
Biến đầu vào: @BatDau, @KetThuc là thời gian bắt đầu và kết thúc truy vấn
Kết quả đầu ra: bảng tổng doanh thu phòng khám trong khoảng thời gian đó bao gồm : NgayThang, DoanhThu, DoanhThuThuoc, DoanhThuXN
CREATE FUNCTION [dbo].[UF_TongDoanhThuPhongKhamChiTiet](@BatDau date, @KetThuc date)
RETURNS @TongDoanhThuChiTiet TABLE (NgayThang date , DoanhThu money,
WHEN XN.NgayLamXetNghiem IS NULL THEN T.NgayLamPhieu
WHEN T.NgayLamPhieu IS NULL THEN XN.NgayLamXetNghiem
WHEN XN.NgayLamXetNghiem IS NULL THEN T.TongTien
WHEN T.NgayLamPhieu IS NULL THEN XN.TongTien
, DoanhThuThuoc = case when T.NgayLamPhieu is null then 0 else T.TongTien end
, DoanhThuXN = case when XN.NgayLamXetNghiem is null then 0 else XN.TongTien end
FROM (SELECT NgayLamXetnghiem,SUM(DonGia) AS TongTien FROM
UF_DanhSachXetNghiemTrongMotThoiGian (@BatDau,@KetThuc) GROUP BY
( SELECT NgayLamPhieu, SUM(GiaThuoc*SoLuongBan) AS TongTien FROM
UF_DanhSachLuongThuocBanTrongMotThoiGian(@BatDau,@KetThuc) GROUP BY NgayLamPhieu )AS T
4 Tạo procedure xoá một bệnh nhân.
Biến đầu vào: @MaBenhNhan là mã bệnh nhân cần xoá
CREATE PROC sp_XoaBenhNhan( @MaBenhNhan char (6))
SELECT @maPhieuKham = MaPhieuKham FROM dbo.PhieuKham WHERE MaBenhNhan =
SELECT @maDonThuoc = MaDon FROM dbo.DonThuoc WHERE MaPhieuKham =
DELETE dbo.ChiTietDonThuoc WHERE MaDon = @maDonThuoc
DELETE dbo.DonThuoc WHERE MaDon = @maDonThuoc
tạo cursor xoá phiếu xét nghiệm của bệnh nhân
DECLARE PXN_cursor CURSOR FORWARD_ONLY FOR SELECT MaPhieuXetNghiem FROM dbo.PhieuXetNghiem WHERE MaPhieuKham = @maPhieuKham
FETCH NEXT FROM PXN_cursor
BREAK DELETE dbo.SuDungXetNghiem WHERE MaPhieuXN = @maPhieuXetNghiem DELETE dbo.PhieuXetNghiem WHERE MaPhieuXetNghiem =
END CLOSE PXN_cursor DEALLOCATE PXN_cursor DELETE dbo.PhieuKham WHERE MaBenhNhan = @MaBenhNhan
DELETE dbo.BenhNhan WHERE MaBenhNhan = @MaBenhNhan
5 Tạo Function đưa ra danh sách các xét nghiệm trong ngày
Biến đầu vào: @NgayThang là ngày truy vấn
Kết quả: danh sách các xét nghiệm được làm trong ngày hôm đó: MaXetNghiem, TenXetNghiem, SoLuong, DonGia
The function [dbo].[UF_ThongKeXetNghiemTheoNgay] is designed to return a table containing statistics on laboratory tests conducted on a specific date It takes a date parameter, @NgayThang, and outputs a table, @ThongKeXetNghiemTheoNgay, which includes columns for test code (MaXetNghiem), test name (TenXetNghiem), quantity (SoLuong), and unit price (DonGia) The function populates this table by selecting data from the PhieuKham table, counting the occurrences of each test code and retrieving the corresponding test name and price.
JOIN dbo.PhieuXetNghiem AS PXN ON PXN.MaPhieuKham = PK.MaPhieuKham
JOIN dbo.SuDungXetNghiem AS SDXN ON PXN.MaPhieuXetNghiem = SDXN.MaPhieuXN
JOIN dbo.DanhMucXetNghiem AS DMXN ON DMXN.MaXetNgiem = SDXN.MaXetNghiem where PK.NgayLamPhieu = @NgayThang group by DMXN.MaXetNgiem, DMXN.TenXetNghiem, DMXN.DonGia return end
6 Tạo procedure xoá một nhân viên.
Biến đầu vào: @MaNhanVien là mã nhân viên cần xoá
CREATE PROC sp_XoaNhanVien(@maNhanVien char (3))
tạo cursor để xoá các phiếu xét nghiệm mà nhân viên đó làm
DECLARE PXN_cursor CURSOR FORWARD_ONLY FOR SELECT MaPhieuXetNghiem FROM dbo.PhieuXetNghiem WHERE MaNhanVien = @maNhanVien
FETCH NEXT FROM PXN_cursor INTO @maPhieuXetNghiem
DELETE dbo.SuDungXetNghiem WHERE MaPhieuXN = @maPhieuXetNghiem
DELETE dbo.PhieuXetNghiem WHERE MaPhieuXetNghiem =
tạo cursor để xoá tất cả các phiếu khám mà nhân viên đó thực hiện
DECLARE PK_cursor CURSOR FORWARD_ONLY FOR SELECT MaPhieuKham FROM dbo.PhieuKham WHERE MaNhanVien = @maNhanVien
FETCH NEXT FROM PK_cursor
BREAK SELECT @maDonThuoc = MaDon FROM dbo.DonThuoc WHERE MaPhieuKham =
DELETE dbo.ChiTietDonThuoc WHERE MaDon = @maDonThuoc
DELETE dbo.DonThuoc WHERE MaDon = @maPhieuKham
DELETE dbo.PhieuKham WHERE MaPhieuKham = @maPhieuKham
DELETE dbo.NhanVien WHERE MaNhanVien = @maNhanVien
7 Tạo procedure tổng tiền thuốc của bệnh nhân
Với các biến : @MaBenhNhan là bệnh nhân cần tính tiền thuốc
@Tien là tổng tiền thuốc mà bệnh nhân phải trả
CREATE PROC [dbo].[sp_TienThuocBN] (@MaBenhNhan char(6), @TienThuoc MONEY OUT) AS
SELECT @maPhieuKham = MaPhieuKham FROM dbo.PhieuKham WHERE MaBenhNhan =
SELECT @maDon = MaDon FROM dbo.DonThuoc WHERE MaPhieuKham = @maPhieuKham SELECT @TienThuoc = SUM(CT.SoLuongBan*T.GiaThuoc) FROM dbo.ChiTietDonThuoc
AS CT, dbo.Thuoc AS T WHERE CT.MaDon = @maDon AND CT.MaThuoc = T.MaThuoc
8 Tạo procedure tính tổng tiền xét nghiệm của bệnh nhân
CREATE ALTER PROC [dbo].[sp_TienXetNghiemBN]( @MaBenhNhan char(6), @TienXN money =0 OUT)
SELECT @maPhieuKham = MaPhieuKham FROM dbo.PhieuKham WHERE MaBenhNhan =
SELECT @TienXN = SUM(DM.DonGia) FROM dbo.PhieuXetNghiem AS XN , dbo.SuDungXetNghiem AS SD, dbo.DanhMucXetNghiem AS DM
WHERE XN.MaPhieuKham = @maPhieuKham AND XN.MaPhieuXetNghiem = SD.MaPhieuXN AND SD.MaXetNghiem = DM.MaXetNgiem
9 Tạo procedure đưa ra hoá đơn của bệnh nhân
@TongTien: số tiền mà bệnh nhân phải trả sau khi khám bệnh gồm tổng tiền thuốc và tiền xét nghiệm
CREATE PROC [dbo].[sp_HoaDonBN](@MaBenhNhan char(6), @TongTien money OUT)
EXEC sp_TienThuocBN @MaBenhNhan, @tienThuoc OUTPUT
EXEC sp_TienXetNghiemBN @MaBenhNhan, @tienXN OUTPUT
10 Tạo Function đưa ra danh sách xét nghiệm trong một khoảng thời gian Biến đầu vào @BatDau và @KetThuc là thời gian bắt đầu tính và thời gian kết thúc tính. Giá trị đầu ra: MaXetNghiem, TenXetNghiem, DonGia, NgayLamXetNghiem
CREATE FUNCTION [dbo].[UF_DanhSachXetNghiemTrongMotThoiGian](@BatDau date ,
RETURNS @DanhSachXetNghiemTrongMotThoiGian TABLE (MaXetNghiem CHAR(2) ,
TenXetNghiem nvarchar(30), DonGia money , NgayLamXetNghiem date )
SELECT DMXN.MaXetNgiem,DMXN.TenXetNghiem,DMXN.DonGia,Pk.NgayLamPhieu FROM dbo.PhieuKham AS PK
JOIN dbo.PhieuXetNghiem AS PXN ON PXN.MaPhieuKham = PK.MaPhieuKham
JOIN dbo.SuDungXetNghiem AS SDXN ON PXN.MaPhieuXetNghiem = SDXN.MaPhieuXN
JOIN dbo.DanhMucXetNghiem AS DMXN ON DMXN.MaXetNgiem = SDXN.MaXetNghiem
WHERE DATEDIFF(DAY,PK.NgayLamPhieu, @KetThuc)