SQL hỗ trợ chức năng COALESCE để trả về biểu thức có giá trị khác NULL đầu tiên trong số những biểu thức được truyền vào COALESCE.

Cú pháp Coalesce trong sql

COALESCE (expression [,…n])

Hay còn viết:

COALESCE( expression 1, expression 2, expression 3, …, expression n)

Trong đó:

  • expression: là một biểu thức có kiểu bất kỳ
  • n: ý là có thể có nhiều expression, mỗi expression cách nhau bởi dấu phẩy (,) như cú pháp thứ 2 ở trên. Tất cả các biểu thức này bắt buộc phải cùng một dạng hoặc có thể qui đổi về cùng một dạng. Ví dụ, expression 1 là kiểu chuỗi thì, expression 2 đến expression n cũng phải là kiểu chuỗi, tương tự expression 1 là kiểu số thì expression 2 đến expression n cũng phải là kểu số, …

Giá trị COALESCE trong sql trả về chính là giá trị của biểu thức (expression) mà nó thỏa.

Ghi chú: nếu tất cả các expression là NULL thì COALESCE trả về NULL

Chức năng COALESCE (expression [,…n]) tương đương với chức năng CASE:

CASE
   WHEN (expression 1 IS NOT NULL) THEN expression 1
   …
   WHEN (expression n IS NOT NULL) THEN expression n
   ELSE NULL

Ví dụ minh họa:

Bảng dữ liệu Allowance chứa thông tin trợ cấp của nhân viên, bao gồm 4 loại trợ cấp sau: phone_allowance (trợ cấp điện thoại), house_allowance (trợ cấp nhà ở), responsibility_allowance (trợ cấp trách nhiệm), overtime_allowance (trợ cấp làm thêm hay còn gọi là trợ cấp tăng ca). Nhân viên chỉ được nhận 1 trong 4 loại trợ cấp nói trên.

Giả sử bảng dữ liệu Allowance có dữ liệu như sau:

Employee Scale phone_allowance house_allowance responsibility_allowance overtime_allowance
Đoàn Văn Đang 1.5 null 500,000 null null
Trần Xuân Vũ 2.6 368,000 null null null
Nguyễn Khánh Hưng 3.4 null null 679,000 null
Đoàn Thanh Thúy 2.9 null null null 464,000

Tiền trợ cấp nhân viên hưởng = hệ số công việc (Scale) * tiền trợ cấp

Sử dụng hàm COALESCE trong SQL như sau:

SELECT COALESCE(phone_allowance, house_allowance, responsibility_allowance, overtime_allowance) * Scale As TotalAllwance

FROM Allowance

Kết quả:

Employee TotalAllwance
Đoàn Văn Đang 750.000
Trần Xuân Vũ 956.800
Nguyễn Khánh Hưng 2.308.600
Đoàn Thanh Thúy 1.345.600.0

Viết câu trả lời

Drop Images

0 Bình luận