สมมติผมมี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แบบนี้
ปรึกษาเรื่องSQL มีวิธีที่จะTotal บางค่าที่อาจเป็นNull ได้ดีกว่านี้มั้ยครับ?
ซึ่ง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แบบนี้