2011-01-20 82 views
16

Tôi đang trong quá trình viết báo cáo và đang tìm cách lấy giá trị trung bình của một cột tuổi. Vấn đề là không phải tất cả các hàng đều có tuổi.TSQL - Trung bình của tất cả các giá trị trong một cột không phải là số

Nếu giá trị cho cột là 0 2 4 tôi muốn 3 trả về, không 2. Tôi không thể đơn giản loại trừ các hàng bằng không với WHERE khi tôi đang sử dụng các cột khác trong các hàng đó. Có một điều như là một loại chức năng AvgIfNotZero?

Trả lời

38
SELECT 

    AVG (CASE WHEN Value <> 0 THEN Value ELSE NULL END) 
    .... 

AVG sẽ không tính đến giá trị NULL. Hoặc này

AVG (NULLIF(Value, 0)) 
0

, ( SELECT (a) AVG TỪ

 (
     SELECT NULLIF([Column1], 0) 
      UNION ALL 
     SELECT NULLIF([Column2], 0) 
      UNION ALL 
     SELECT NULLIF([Column3], 0) 
      UNION ALL 
     SELECT NULLIF([Column4], 0) 
     ) T (a) 
    ) AS [4 Column Average] 
+0

Bạn nên cung cấp cho bối cảnh nhiều hơn đến một câu trả lời thay vì chỉ thả một khối mã mà OP hoặc độc giả tương lai có thể không hiểu. – zgue

Các vấn đề liên quan