ปรึกษาเรื่องSQL มีวิธีที่จะTotal บางค่าที่อาจเป็นNull ได้ดีกว่านี้มั้ยครับ?

สมมติผมมีColumn A,B,C และจะมีอยู่คอลัมน์นึงที่ทำหน้าที่ในการ Total A+B+Cเข้าด้วยกัน
ซึ่งQueryทั้งหมดมันจะเป็นโครงสร้างในลักษณะนี้
SELECT A,B,C, (A+B+C+D) as TOTAL
FROM TABLES


ตอนแรกทำแบบนี้ SELECT  A,B,C, (ISNULL(A,0) + ISNULL(B,0) + ISNULL(C,0) ) AS TOTAL
แต่ผมมีเงื่อนไขที่ต้องนำไปใช้ในการแสดงผลในSpread คือ ถ้าA,B,C เป็นNULL ทั้งหมด ก็ต้องReturn เป็นNull
เพื่อที่ว่าถ้าตัวไหนเป็นNullผมก็จะไปเขียนโค้ดใยVBให้มันแสดงผลเป็น "--" แทน

แต่จากQueryข้างต้น ถ้าตัวไหนเป็นNull มันก็จะแปลงเป็น0ให้หมด ทำให้ไม่ว่ากรณ๊ใดๆ มันจะไม่มีทางได้Totalเป็นNULLออก

ผลลัพธ์Queryนั้นจะได้ตามนี่
A+B+C
0+0+0 = 0
NULL+NULL+NULL = 0
(มันจะแยกไม่ออกว่า Totalไหนเป็น0จริงๆ)

ทีนี้ผมก็เลยไปเขียนเป็น
SELECT A,B,C, CASE WHEN (A IS NULL) AND (B IS NULL) THEN NULL
                      ELSE ISNULL(A,0) + ISNULL(B,NULL) END

มันก็ยาวอีก เพราะคอลัมน์Totalอื่นๆก็จะทำลักษณะแบบนี้คล้ายๆกันอีกหลายๆคอลัมน์

มันพอจะมีฟังก์ชั่น หรือ วิธีไหนที่มันกระชับกว่านี้มั้ยครับ โดยที่ไม่ต้องcase whenแบบนี้
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่