2015-11-19 118 views
0

這裏的SQL查詢與MAX CASE WHEN ...需要幫助的MAX CASE查詢時刪除空記錄

SELECT dbo.icalificaciones.idalumno, 
      dbo.ialumnosins.appaterno + ' ' + dbo.ialumnosins.apmaterno + ' ' + dbo.ialumnosins.nombre AS Alumnos, 
    MAX(CASE WHEN idparcial = 1 THEN calfinal ELSE null END) AS U1, 
    MAX(CASE WHEN idparcial = 2 THEN calfinal ELSE null END) AS U2, 
    MAX(CASE WHEN idparcial = 3 THEN calfinal ELSE null END) AS U3, 
    MAX(CASE WHEN idparcial = 4 THEN calfinal ELSE null END) AS U4, 
    MAX(CASE WHEN idparcial = 5 THEN calfinal ELSE null END) AS U5, 
    MAX(CASE WHEN idparcial = 6 THEN calfinal ELSE null END) AS U6, 
    MAX(CASE WHEN idparcial = 7 THEN calfinal ELSE null END) AS U7, 
    MAX(CASE WHEN idparcial = 8 THEN calfinal ELSE null END) AS U8 
    FROM dbo.icalificaciones INNER JOIN dbo.ialumnosins ON dbo.icalificaciones.idalumno = dbo.ialumnosins.IDalumno 

這裏的結果。 如何刪除空值? 我不需要U2,U3,U4 ... U8。 謝謝。

enter image description here

+0

不要在查詢中包含它們嗎?或者你是否在說要動態確定結果中的整個列是否爲空並排除它們? –

+0

是的,動態的。有些結果有8列。謝謝 –

+0

您將不得不使用動態sql來確定是否要跳過某個列。這將是相當醜陋的。你爲什麼要動態地改變像這樣的select語句中的列數?它似乎充滿了挑戰。 –

回答

0

您想使用HAVING關鍵字。

假設你想省略並記錄返回列U2爲NULL。您只需使用:

HAVING MAX(CASE WHEN idparcial = 2 THEN calfinal ELSE null END) is not null 

在查詢結束。

+0

但是該列仍然在結果集中,因爲它是選擇列表中的一列。 –

+0

這是真的,但是因爲在我看來,如果你不想在選擇列表中找到某些東西,那麼你可以將它們刪除,我試圖想想他說什麼,他可能意味着什麼。 – CloudyOne

+0

他的標題DID說他想刪除空記錄,而不是列。 :) – CloudyOne