Có một cấu trúc T-SQL đơn giản hơn để "tất cả các cột này bằng nhau (NULL bị bỏ qua) trên một hàng" - tôi muốn nói hiệu quả:
WHERE MIN(a, b, c) = MAX(a, b, c) OR COALESCE(a, b, c) IS NULL
- nó sẽ tương đương với COALESCE của tất cả các hoán vị bằng nhau - nhưng không có hàm MIN / MAX không tổng hợp
Một thay thế cho 3 cột là:
WHERE (
COALESCE(a, b, c) = COALESCE(b, c, a)
AND COALESCE(a, b, c) = COALESCE(c, a, b)
AND COALESCE(a, b, c) = COALESCE(b, a, c)
AND COALESCE(a, b, c) = COALESCE(a, c, b)
AND COALESCE(a, b, c) = COALESCE(c, b, a)
)
OR COALESCE(a, b, c) IS NULL
tức là "Tất cả các cột không phải NULL a, b, c phải bằng nhau hoặc tất cả các cột có thể là null"
Rõ ràng việc triển khai PIVOT / UNPIVOT có thể được thực hiện hoặc một tuyên bố CASE phức tạp, nhưng tôi đang tìm kiếm một cái gì đó tương đối đơn giản.
Trong trường hợp này, các cột đều là số nguyên, vì vậy tôi đoán có lẽ có một mẹo toán học mà tôi có thể tìm ra.