• Cách lồng hàm in trong hàm IIF khi tạo truy vấn
  • RE: Cách lồng hàm in trong hàm IIF khi tạo truy vấn

    Nguyễn Đăng Toản > 03-09-18, 09:20 PM

    (03-09-18, 09:03 PM)ongke0711 Đã viết: - [MA PHONG] là tên hộp thoại để bạn nhập cái DEPTCODE. KHông thể dùng nó trong hàm IIF.
      IIF([DEPTCODE]=121,...,...)
    - Tham số trả về khi diều kiện SAI của hàm IIF của bạn là chuỗi rỗng "", nó không đúng với dạng dữ liệu cột CIFNO (dạng số).
    - Tham số trả về khi điều kiện ĐÚNG (trả về "IN(..)) cũng không đúng kiểu xử lý của Access nên nó không hiểu trong query. 
    - Logic xử lý hàm IIF của bạn nó không hợp lý.

    Nói về xử lý table của bạn.
    - Nếu CIF thuộc 150 nhưng chuyển giao cho 121 quản lý thì nó thể hiện ở Field nào? bạn dùng nó trong query luôn

    Những CIF thuộc 150 nhưng chuyển giao cho 121 quản lý thì là phải gõ tay vào anh vì phải theo dõi thủ công ở ngoài không có trường thể hiện, có cách nào để ACCESS hiểu hàm IN khi mệnh đề IIF đúng ko anh
  • RE: Cách lồng hàm in trong hàm IIF khi tạo truy vấn

    ongke0711 > 03-09-18, 11:31 PM

    Bạn nói rõ lại bạn muốn lọc nhưng dữ liệu gi?
    Vậy 2 cái mã CIF bạn đề cập ở trên vừa có DEPTCODE là 121 vừa có 150? tức là dữ liệu trùng lặp trong table này (2 dòng cùng CIFNO mỗi dòng thuộc 1 phòng ban)?
  • RE: Cách lồng hàm in trong hàm IIF khi tạo truy vấn

    Nguyễn Đăng Toản > 03-09-18, 11:45 PM

    (03-09-18, 11:31 PM)ongke0711 Đã viết: Bạn nói rõ lại bạn muốn lọc nhưng dữ liệu gi?
    Vậy 2 cái mã CIF bạn đề cập ở trên vừa có DEPTCODE là 121 vừa có 150? tức là dữ liệu trùng lặp trong table này (2 dòng cùng CIFNO)?

    Dạ, tức là mỗi CIF chỉ có 1 deptcode duy nhất và ko trùng lắp, (ở đây CIF 7441468, 7441271 có dept 150) (file table CIF theo dept xuất ra từ hệ thống và ăn ngay từ đầu khi gán deptcode theo CIF và ko đổi được sau khi đã bàn giao khách hàng, ko có trường thể hiện việc bàn giao phải theo dõi thủ công)

    hiện nay 2 CIF 7441468, 7441271 có dept 150 nhưng đã bàn giao cho dept 121. Bây giờ muốn truy xuất số lượng KH theo dept 121 (trên file dữ liệu chỉ có 3 KH nhưng thực tế có đến 5 KH do nhận bàn giao 2 KH từ dept 150)

    Dùng 2 hàm IIF thì ok ví dụ:

    PARAMETERS [MA PHONG] Value;
    SELECT [T-Cdmast_date].ACNAME, [T-Cdmast_date].CIFNO, [T-Cdmast_date].DEPTCODE
    FROM [T-Cdmast_date]
    WHERE ((([T-Cdmast_date].DEPTCODE)=[MA PHONG])) OR ((([T-Cdmast_date].CIFNO)=IIf([MA PHONG]=121,7441468))) OR ((([T-Cdmast_date].CIFNO)=IIf([MA PHONG]=121,7441271)));

    thì ACCESS hiểu KH của DEPT 121 có toàn bộ 5 KH, ý e hỏi là có cách nào kết hợp lại để ACCESS hiểu trong 1 hàm IIF duy nhất mà ko phải tách ra 2 hàm không.

    Ý thứ 2 e muốn hỏi thêm, cũng cùng trong câu lệnh trên viết thế nào để đến khi gõ DEPT 150 thì ko hiện ra KH nào cả (vì 2  CIF 7441468, 7441271 của dept 150 đã bàn giao cho 121) nên hiện tại DEPT 150 ko có khách hàng nào cả

    E gửi lại file access có dữ liệu trường hợp của e ạ https://drive.google.com/file/d/1EySSKcU...pmDwQ/view
  • RE: Cách lồng hàm in trong hàm IIF khi tạo truy vấn

    ongke0711 > 04-09-18, 12:08 AM

    Bạn dùng câu lệnh SQL này thử xem:

    PARAMETERS [MA PHONG] Short;
    SELECT [T-Cdmast_date].ACNAME, [T-Cdmast_date].CIFNO, [T-Cdmast_date].DEPTCODE
    FROM [T-Cdmast_date]
    WHERE ((([T-Cdmast_date].DEPTCODE)=[MA PHONG])) OR ((([T-Cdmast_date].CIFNO) In (7441468,7441271)));
  • RE: Cách lồng hàm in trong hàm IIF khi tạo truy vấn

    Nguyễn Đăng Toản > 04-09-18, 12:20 AM

    (04-09-18, 12:08 AM)ongke0711 Đã viết: Bạn dùng câu lệnh SQL này thử xem:

    PARAMETERS [MA PHONG] Short;
    SELECT [T-Cdmast_date].ACNAME, [T-Cdmast_date].CIFNO, [T-Cdmast_date].DEPTCODE
    FROM [T-Cdmast_date]
    WHERE ((([T-Cdmast_date].DEPTCODE)=[MA PHONG])) OR ((([T-Cdmast_date].CIFNO) In (7441468,7441271)));

    Dạ cái này chỉ áp dụng với trường hợp có 2 mã 121, 150 ví dụ 3 mã thậm chí hơn nhiều (vì NH có rất nhiều phòng ban) 121, 150, 151 thì có những trường hợp tương tự dept 150 nhận bàn giao 151. Thực tế 5, 6 phòng ban bàn giao KH qua lại cho nhau nên mới cần dùng đến hàm IIF bao gồm các CIF đã nhận bàn giao. Và hàm này chưa khắc phục dc VD khi gõ 150 vào thì loại ra 2 CIF 7441468, 7441271 vì đã bàn giao cho 121.
  • RE: Cách lồng hàm in trong hàm IIF khi tạo truy vấn

    ongke0711 > 04-09-18, 12:54 AM

    - Vậy thì báo bạn luôn là IIF không giải quyết được. Các trường hợp của bạn đưa ra nó thủ công hoàn toàn và không có một table, field nào lưu trữ thông tin phục vụ cho Query truy vấn. 

    - Không ai thiết kế CSDL để mỗi khi có thay đổi gì thì vô query thay đổi thủ công lại các công thức, tham số. Bên cạnh đó cú pháp qui định của hàm IIF như đã nói trên không phù hợp để giải quyết các trường hợp đề ra của bạn.

    - Có một giải pháp khác là bạn tạo thêm bảng phụ lưu thông tin các mã CIFNP, DEPTCODE đã bàn giao. Sau đó dùng Union Query để gộp 2 bảng tại -> dùng Select Query thông thường với điều kiện lọc mà [MA PHONG]

    Vd: Tạo Table mới tên T-TransDept

         CIFNO     |      DEPTTRANSFERD
      ----------------------------------
        7441468  |          121
        7441271  |          121
        1234567  |          150

    - Tạo Union Query: đặt tên là quniCIFALL

    SELECT [T-Cdmast_date].ACNAME, [T-Cdmast_date].CIFNO, [T-Cdmast_date].DEPTCODE
    FROM [T-Cdmast_date]
    UNION ALL
    SELECT "", [T-TransDept].CIFNO, [T-TransDept].DEPTTRANSFERD
    FROM [T-TransDept];


    - Tạo Select query lọc theo [MA PHONG]:

    PARAMETERS [MA PHONG] Short;
    SELECT [quniCIFALL].ACNAME, [quniCIFALL].CIFNO, [quniCIFALL].DEPTCODE
    FROM [quniCIFALL]
    WHERE (([quniCIFALL].DEPTCODE)=[MA PHONG]));
  • RE: Cách lồng hàm in trong hàm IIF khi tạo truy vấn

    Nguyễn Đăng Toản > 04-09-18, 08:17 PM

    (04-09-18, 12:54 AM)ongke0711 Đã viết: - Vậy thì báo bạn luôn là IIF không giải quyết được. Các trường hợp của bạn đưa ra nó thủ công hoàn toàn và không có một table, field nào lưu trữ thông tin phục vụ cho Query truy vấn. 

    - Không ai thiết kế CSDL để mỗi khi có thay đổi gì thì vô query thay đổi thủ công lại các công thức, tham số. Bên cạnh đó cú pháp qui định của hàm IIF như đã nói trên không phù hợp để giải quyết các trường hợp đề ra của bạn.

    - Có một giải pháp khác là bạn tạo thêm bảng phụ lưu thông tin các mã CIFNP, DEPTCODE đã bàn giao. Sau đó dùng Union Query để gộp 2 bảng tại -> dùng Select Query thông thường với điều kiện lọc mà [MA PHONG]

    Vd: Tạo Table mới tên T-TransDept

         CIFNO     |      DEPTTRANSFERD
      ----------------------------------
        7441468  |          121
        7441271  |          121
        1234567  |          150

    - Tạo Union Query: đặt tên là quniCIFALL

    SELECT [T-Cdmast_date].ACNAME, [T-Cdmast_date].CIFNO, [T-Cdmast_date].DEPTCODE
    FROM [T-Cdmast_date]
    UNION ALL
    SELECT "", [T-TransDept].CIFNO, [T-TransDept].DEPTTRANSFERD
    FROM [T-TransDept];


    - Tạo Select query lọc theo [MA PHONG]:

    PARAMETERS [MA PHONG] Short;
    SELECT [quniCIFALL].ACNAME, [quniCIFALL].CIFNO, [quniCIFALL].DEPTCODE
    FROM [quniCIFALL]
    WHERE (([quniCIFALL].DEPTCODE)=[MA PHONG]));

    Dạ e chưa thử nữa, nhưng e cảm ơn anh rất nhiều ạ, anh nhiệt tình quá