NEWS
                        
                    - [DEVEXPRESS] Hỗ trợ tìm kiếm highlight không dấu và không khoảng cách trên Gridview Filter
- [C#] Chia sẻ source code phần mềm Image Downloader tải hàng loạt hình ảnh từ danh sách link url
- [C#] Chụp hình và quay video từ camera trên winform
- [C#] Chia sẽ full source code tách file Pdf thành nhiều file với các tùy chọn
- Giới thiệu về Stock Tracker Widget - Công cụ theo dõi cổ phiếu và cảnh báo giá tăng giảm bằng C# và WPF
- [VB.NET] Chia sẻ công cụ nhập số tiền tự động định dạng tiền tệ Việt Nam
- [VB.NET] Hướng dẫn fill dữ liệu từ winform vào Microsoft word
- [VB.NET] Hướng dẫn chọn nhiều dòng trên Datagridview
- Hướng Dẫn Đăng Nhập Nhiều Tài Khoản Zalo Trên Máy Tính Cực Kỳ Đơn Giản
- [C#] Chia sẻ source code phần mềm đếm số trang tập tin file PDF
- [C#] Cách Sử Dụng DeviceId trong C# Để Tạo Khóa Cho Ứng Dụng
- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [C#] Hướng dẫn download file từ Minio Server Winform
[DATABASE] Hướng dẫn sử dụng hàm ROW_NUMBER, RANK và DENSE_RANK trong Sqlserver
Bài viết hôm nay, mình xin hướng dẫn các bạn sử dụng các hàm: ROW_NUMBER, RANK và DENSE_RANK trong Sqlserver.
[DATABASE] Hướng dẫn sử dụng ROW_NUMBER, RANK và DENSE_RANK trong sqlserver
VD: Chúng ta có yêu cầu như sau
- Lấy danh sách nhân viên dựa vào ngày ký hợp đồng cho biết nhân viên đó là người thứ mấy trong phòng được ký hợp đồng
- Lấy danh sách nhân viên dựa vào lương cho biết nhân viên đó xếp hạng thứ mấy trong phòng
Với yêu cầu 1, ta có bảng kết quả sau:
| DEPTNO | ENAME | HIREDATE | SAL | NUM | 
| 10 | CLARK | 09/06/1981 | 2450 | 1 | 
| 10 | KING  | 17/11/1981 | 5000 | 2 | 
| 10 | MILLER | 23/01/1982 | 1300 | 3 | 
| 20 | SMITH | 17/12/1980 | 800 | 1 | 
| 20 | JONES | 02/04/1981 | 2975 | 2 | 
| 20 | FORD  | 03/12/1981 | 3000 | 3 | 
| 20 | SCOTT | 09/12/1982 | 3000 | 4 | 
| 20 | ADAMS | 12/01/1983 | 1100 | 5 | 
| 30 | ALLEN | 20/02/1981 | 1600 | 1 | 
| 30 | WARD  | 22/02/1981 | 1250 | 2 | 
| 30 | BLAKE | 01/05/1981 | 2850 | 3 | 
| 30 | TURNER | 08/09/1981 | 1500 | 4 | 
| 30 | MARTIN | 28/09/1981 | 1250 | 5 | 
| 30 | JAMES | 03/12/1981 | 950 | 6 | 
Và đây là câu SELECT kết hợp với ROW_NUMBER để thực hiện:
SELECT deptno,
       ename,
       hiredate,
       sal,
       ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY hiredate) num
  FROM emp
ORDER BY deptno, num;Với yêu cầu số 2, ta có bảng kết quả sau:
| DEPTNO | ENAME | HIREDATE | SAL | RANK_SAL | DENSE_RANK_SAL | 
| 10 | MILLER | 1/23/1982 | 1300 | 1 | 1 | 
| 10 | CLARK | 6/9/1981 | 2450 | 2 | 2 | 
| 10 | KING  | 11/17/1981 | 5000 | 3 | 3 | 
| 20 | SMITH | 12/17/1980 | 800 | 1 | 1 | 
| 20 | ADAMS | 1/12/1983 | 1100 | 2 | 2 | 
| 20 | JONES | 4/2/1981 | 2975 | 3 | 3 | 
| 20 | SCOTT | 12/9/1982 | 3000 | 4 | 4 | 
| 20 | FORD  | 12/3/1981 | 3000 | 4 | 4 | 
| 30 | JAMES | 12/3/1981 | 950 | 1 | 1 | 
| 30 | MARTIN | 9/28/1981 | 1250 | 2 | 2 | 
| 30 | WARD  | 2/22/1981 | 1250 | 2 | 2 | 
| 30 | TURNER | 9/8/1981 | 1500 | 4 | 3 | 
| 30 | ALLEN | 2/20/1981 | 1600 | 5 | 4 | 
| 30 | BLAKE | 5/1/1981 | 2850 | 6 | 5 | 
Và đây là câu SELECT kết hợp với RANK và DENSE_RANK để thực hiện:
SELECT deptno,
       ename,
       hiredate,
       sal,
       RANK () OVER (PARTITION BY deptno ORDER BY sal) rank_sal,
       DENSE_RANK () OVER (PARTITION BY deptno ORDER BY sal) dense_rank_sal
  FROM emp
ORDER BY deptno;Nhìn vào kết quả trên ta thấy rằng kết quả của hàm RANK và DENSE_RANK có những điểm như sau:
- Giống nhau: với những dòng có cùng SAL thì sẽ có cùng hạng
- Khác nhau:
 + Hàm RANK sẽ bỏ qua thứ hạng tiếp theo cho những dòng có cùng hạng trước đó
 + Hàm DENSE_RANK không bỏ qua thứ hạng tiếp theo cho những dòng có cùng hạng trước đó
LaptrinhVB via oracletechtalk.blogspot.com

![[DATABASE] Hướng dẫn sử dụng hàm ROW_NUMBER, RANK và DENSE_RANK trong Sqlserver](https://laptrinhvb.net/uploads/users/9a8cb514e4428e85fb4ca07588e9103f.png)

![[SQLSERVER] Loại bỏ Restricted User trên database MSSQL](https://laptrinhvb.net/uploads/source/DATABASE/foreignkey_sql.png)
![[SQLSERVER] Hướng dẫn tạo script sql từ ứng dụng Sqlserver management Studio](https://laptrinhvb.net/uploads/source/DATABASE/script_sql.png)
![[DATABASE] Xóa lịch sử danh sách đăng nhập tài khoản trên SMSS Sqlserver Management Studio](https://laptrinhvb.net/uploads/source/DATABASE/delete_login_smss.png)
![[DATABASE] Sự khác nhau giữa hai câu lệnh TRUNCATE vs DELETE trong sqlserver](https://laptrinhvb.net/uploads/source/DATABASE/sqlserver_wordwrap_thumb.png)
![[DATABASE] TSQL view max length all column data trên table Sqlserver](https://laptrinhvb.net/uploads/source/DATABASE/sql-trigger.jpg)
![[DATABASE] Phân biệt câu lệnh DDL và DML trong sqlserver](https://laptrinhvb.net/uploads/source/dml_ddl.png)
![[DATABASE] Tách số và chữ từ chuỗi - hàm tối ưu hóa tách số và chữ trong Sqlserver](https://laptrinhvb.net/uploads/source/DATABASE/sql-function-to-get-number-from-string.jpg)
![[DATABASE] Khóa chính Primary Key trong Sqlserver](https://laptrinhvb.net/uploads/source/DATABASE/primary_key.jpg)
![[DATABASE] Chia sẻ dữ liệu Pantone Color sql và json api](https://laptrinhvb.net/uploads/source/DATABASE/panton_color.png)
![[DATABASE] Hướng dẫn tạo Procedure String Split in Mysql](https://laptrinhvb.net/uploads/source/new_image_baiviet/mysql_thub.jpg)
![[DATABASE] Hiển thị Emoji trên cơ sở dữ liệu Sqlserver](https://laptrinhvb.net/uploads/source/DATABASE/emoji_in_sqlserver.png)
![[SQLSERVER] Hướng dẫn tìm kiếm nâng cao trên sql](https://laptrinhvb.net/uploads/source/DATABASE/sqlserver_search_advance.png)
![[DATABASE] In cây thông noel bằng sqlserver](https://laptrinhvb.net/uploads/source/new_image_baiviet/x_mas_tree_sql.png)
![[DATABASE] Hướng dẫn mã hóa và giải mã sử dụng thuật toán AES 256 trên sqlserver](https://laptrinhvb.net/uploads/source/new_image_baiviet/aes_sql.png)
![[DATABASE] Base64 Encode and Decode  trong Sqlserver](https://laptrinhvb.net/uploads/source/new_image_baiviet/b64-fb.png)
![[DATABASE] Hướng dẫn sử dụng Hàm ASCII trong sqlserver](https://laptrinhvb.net/uploads/source/DATABASE/ascii_sql.png)
