• Sử dụng hàm SWITCH trong Access
  • Sử dụng hàm SWITCH trong Access

    tungthoi15 > 14-07-21, 10:23 AM

    Do trong chuyên mục Hàm, mình không thấy nút Tạo chủ đề, nên mình để tạm bài viết ở đây
      Hàm SWITCH:
    -         Công dụng: Lượng giá 1 danh sách biểu thức và trả về 1 trị hoặc biểu thức tương ứng đâu tiên trong danh sách có trị True
    -         Cú pháp:
    SWITCH(Biểu thức 1, Kết quả 1 [, Biểu thức 2, Kết quả 2…..[,Biểu thức n, Kết quả n]])

    -   *Switch xét các biểu thức lần lượt từ trái qua phải. Nếu biểu thức 1 là True thì Switch trả về kết quả 1
            Nếu biểu thức 1 là False, Biểu thức 2 là True thì Switch trả về Kết quả 2
            Nếu biểu thức 1 là True mà biểu thức 5 bị lỗi (Ví dụ chia cho 0) thì hàm sẽ báo lỗi chứ không trả về kết quả 1
            Nếu mọi biểu thức đều là False thì hàm sẽ trả về giá trị Null
            Muốn chọn giá trị còn lại khi mọi biểu thức đều False, (cũng giống như chọn tình huống còn lại (Else của lệnh IF; hoặc Case Else của Select Case) thì ta dùng hằng True cho biểu thức cuối cùng;
    VD: Trong Query       SWITCH(DiemTB<5, “Yếu”,
                                    DiemTB>=5 and DiemTB <=6.5, “Trung Bình”,
                                    DiemTB>6.5 and DiemTB <8, “Khá”,
                                    DiemTB>=8 and DiemTB <9, “Giỏi”,
                                    True, “Xuất xắc”)
       ************
    Bài Toán Ví dụ:
                    Cập nhật tiền thưởng vào bảng tblBanhang cho nhân viên
    -         Nếu bán dưới 1.000 sp thì được thưởng 500.000 đ
    -         Nếu bán từ 1.000 sp đến dưới 2.000 sp thì được thưởng 1.000.000 đ
    -         Nếu bán từ 2.000 sp đến dưới 3.000 sp thì được thưởng 3.000.000 đ
    -         Nếu bán từ 3.000 sp đến dưới 4.000 sp thì được thưởng 5.000.000 đ
    -         Từ 4.000 sp trở lên thì được thưởng 7.000.000 đ
    [img][Hình: Uz4KxEb.jpg][/img]


    => Nếu dùng Query Update:
    Mã PHP:
    UPDATE tblBanHang SET tblBanHang.TienThuong = Switch([doanhsoban]<1000,500000,[doanhsoban]>=1000 And [doanhsoban]<2000,1000000,[doanhsoban]>=2000 And [doanhsoban]<3000,3000000,[doanhsoban]>=3000 And [doanhsoban]<4000,5000000,True,7000000); 

    => Nếu dùng Code VBA:
    Mã PHP:
    Function TinhThuong()
    Dim rs As DAO.Recordsetsoluong As Single
    Set rs 
    CurrentDb.OpenRecordset("tblBanhang")
    rs.MoveFirst

    Do While Not rs.EOF
    soluong 
    rs("doanhsoban")
    rs.Edit
    rs
    ("TienThuong") = Switch(soluong 1000500000_
                                                  soluong 
    >= 1000 And soluong 20001000000_
                                                  soluong 
    >= 2000 And soluong 30003000000_
                                                  soluong 
    >= 3000 And soluong 40005000000_
                                                  True
    7000000)
    rs.Update
    rs
    .MoveNext
    Loop
    rs
    .Close
    Set rs 
    Nothing
    End 
    Function 

    =>>>>>>KẾT QUẢ:
    [img][Hình: l0AaMYv.jpg][/img]
  • RE: Sử dụng hàm SWITCH trong Access

    ongke0711 > 14-07-21, 12:42 PM

    (14-07-21, 10:23 AM)tungthoi15 Đã viết: ...
            Nếu mọi biểu thức đều là False thì hàm sẽ trả về giá trị Null
    ..

    Có thể dùng thêm một thủ thuật nhỏ cho trường hợp này nếu bạn nào không muốn ô kết quả để trống (Null): Bao cái hàm Switch bằng hàm Nz.

    Vd: Nz(SWITCH(Biểu thức 1, Kết quả 1 , Biểu thức 2, ...), "Không thuộc phạm vi kiểm tra")

    (* Muốn gõ cái text/num gì cũng được, miễn là Datatype đúng với thiết lập trong Table của cột trả về giá trị.)
  • RE: Sử dụng hàm SWITCH trong Access

    ngochien9898 > 19-11-22, 06:17 PM

    thông tin hữu ích cho những ai đang cần