2012-11-29 10 views
5

Tôi có truy vấn này trong ứng dụng VB trên Access DB:số không đúng đối với SQL ISNULL() trên Access DB

SELECT DISTINCT Specialization, MAX(a.faultZone) AS faultZone, ISNULL(a.faultCount, 0) AS NoOfFaults FROM Technicians AS t 
    LEFT JOIN 
      ( 
      SELECT DISTINCT Faults.[Type] AS faultType, MAX(Faults.[Zone]) AS faultZone, COUNT(Faults.[Type]) AS faultCount 
      FROM Faults " 
      WHERE Faults.[Zone] = 8 " ' this value will be from variable 
      GROUP BY Faults.[Type] " 
      ) AS a 
    ON (t.Specialization = a.faultType) 
    WHERE t.specialization <> 'None' " 
    GROUP BY a.faultCount, t.Specialization 

Nó cung cấp sau vấn đề mà tôi không thể giải quyết ...

"sai số của các đối số sử dụng với chức năng trong biểu thức truy vấn 'ISNULL (a.faultCount, 0'."

đơn giản Những gì tôi muốn đạt được thiết lập giá trị của NoOFFaults đến số không, điều đó có nghĩa là không có lỗi trong Vùng cụ thể.

Cảm ơn bạn

Trả lời

7

Chỉ cần thêm hai xu của tôi, và trong khi tôi thích cú pháp đơn giản của Nz(), nếu bạn tìm kiếm sự cố hiệu suất miễn phí, cả IsNull() và NZ() nên tránh để ủng hộ Is Null:
IIF(a.faultCount Is Null, 0, a.faultCount).

Xem lời giải thích tuyệt vời ở đây: http://allenbrowne.com/QueryPerfIssue.html

Ngoài ra, nếu bảng của bạn là trong SQL Server hoặc Oracle, sử dụng Nz() sẽ buộc nhiều truy vấn được thực hiện tại địa phương, với một tác động hiệu suất HUGE.

+0

+1 Tôi thích liên kết. Cá nhân tôi chưa bao giờ gặp rắc rối với Nz nhưng nó có thể là một vấn đề trong một số trường hợp nhất định – HelloW

+0

Vô cùng tôi muốn tôi có thể chấp nhận tất cả các câu trả lời ở đây. Tôi đã kiểm tra liên kết và có thể viết lại mã của tôi. Cảm ơn rất nhiều! – johnyTee

+0

Điều này khiến tôi cảm thấy thất vọng. Rất hữu ích. Cảm ơn. – StatsViaCsh

5

Tôi nghĩ rằng bạn đang tìm kiếm chức năng nz

Nz(a.faultCount, 0) 

sẽ trở lại 0 nếu giá trị là null

+0

Vâng, tôi vừa tìm kiếm điều này và đó cũng là câu trả lời hay. Thx – johnyTee

+1

+! - Wow, bằng cách nào đó tôi chưa từng thấy điều đó, hoặc hoàn toàn quên mất nó. Tôi thích các phiên bản 'ISNULL' của SQL Server và Access là hoàn toàn khác nhau như thế nào. – LittleBobbyTables