SQL·动态数据透视:将NULL替换为零(0)

时间:2019-05-09 13:36:52

标签: sql-server tsql null pivot

我需要透视数据,变量:年(动态)。但是多年来,我没有数据,但我得到了空值。我需要将这些空值替换为0。

我尝试了一些示例,但无法获得预期的结果。

谢谢

数据:

enter image description here

DECLARE @query  AS NVARCHAR(MAX),
    @cols AS NVARCHAR(MAX),   
    @anyoUltPax AS NVARCHAR(MAX),
    @anyoAntPax AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME([Año]) FROM paxESTOP WHERE ([Año] >= YEAR(GETDATE())-7) AND ([Año] <= YEAR(GETDATE())-1)
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'');

SET @anyoUltPax =  CONVERT(INT,
                    CASE 
                    WHEN IsNumeric(CONVERT(VARCHAR(4),YEAR(GETDATE())-1)) = 1 THEN CONVERT(VARCHAR(4),YEAR(GETDATE())-1)
                    ELSE 0 END)

SET @anyoAntPax =  CONVERT(INT,
                    CASE 
                    WHEN IsNumeric(CONVERT(VARCHAR(4),YEAR(GETDATE())-2)) = 1 THEN CONVERT(VARCHAR(4),YEAR(GETDATE())-2)
                    ELSE 0 END)


set @query = 'SELECT *, [' + @anyoUltPax + ']-[' + @anyoAntPax+ '] as [Diferencia anual] FROM
        (

        SELECT [apto_base] as Origen,
               [apto_dest] as Destino,
               [cia_id] as [Compañía],
               [dim_Paises].pais AS País,
               [dim_Zonas].zona AS Zona,
               [CCAA_org].CCAA AS [CCAA base],
               [CCAA_dest].CCAA AS [CCAA dest],
               [ciudad] AS [Ciudad Destino],
               Distancia,
               Año,
               Pax     
        FROM 
        (SELECT [apto_base]
               ,[apto_dest]
               ,[cia_id]
               ,[pais_id]
               ,[zona_id]
               ,[CCAA_id_org]
               ,[CCAA_id_dest]
               ,[distancia]
               ,[año] as [Año]      
               ,SUM([pax_tot]) as Pax
        FROM [MKTPBI].[dbo].[paxESTOP]
        WHERE ([Año] >= YEAR(GETDATE())-7) AND ([Año] <= YEAR(GETDATE())-1) 
        GROUP BY [apto_base],[apto_dest],[cia_id],[pais_id],[zona_id],[CCAA_id_org],[CCAA_id_dest],[distancia],[Año]            
        ) pax           

    LEFT JOIN dim_Paises ON pax.pais_id = dim_Paises.pais_id
    LEFT JOIN dim_Zonas ON pax.zona_id = dim_Zonas.zona_id
    LEFT JOIN dim_CCAA as CCAA_org ON pax.CCAA_id_org = CCAA_org.CCAA_id
    LEFT JOIN dim_CCAA as CCAA_dest ON pax.CCAA_id_dest = CCAA_dest.CCAA_id
    LEFT JOIN dim_Aeropuertos ON pax.apto_dest = dim_Aeropuertos.apto_id 

       )  x

        pivot 
        (
            sum(x.Pax)
            for [Año] in (' + @cols + ')
        ) p order by ['+@anyoUltPax+'] desc '

execute(@query)

1 个答案:

答案 0 :(得分:0)

要在SQL Server中将null更改为零,请使用:

ISNULL( mycol, 0 )

在oracle中:

NVL( mycol, 0 )