SQL Server - Include NULL using UNPIVOT

前端 未结 7 1571
暖寄归人
暖寄归人 2020-12-09 03:40

UNPIVOT will not return NULLs, but I need them in a comparison query. I am trying to avoid using ISNULL the following ex

7条回答
  •  情话喂你
    2020-12-09 03:45

    Using dynamic SQL and COALESCE, I solved the problem like this:

    DECLARE @SQL NVARCHAR(MAX)
    DECLARE @cols NVARCHAR(MAX)
    DECLARE @dataCols NVARCHAR(MAX)
    
    SELECT 
        @dataCols = COALESCE(@dataCols + ', ' + 'ISNULL(' + Name + ',0) ' + Name , 'ISNULL(' + Name + ',0) ' + Name )
    FROM Metric WITH (NOLOCK)
    ORDER BY ID
    
    SELECT 
        @cols = COALESCE(@cols + ', ' + Name , Name )
    FROM Metric WITH (NOLOCK)
    ORDER BY ID
    
    SET @SQL = 'SELECT ArchiveID, MetricDate, BoxID, GroupID, ID MetricID, MetricName, Value
                FROM 
                   (SELECT ArchiveID, [Date] MetricDate, BoxID, GroupID,  ' + @dataCols + '
                    FROM MetricData WITH (NOLOCK)
                    INNER JOIN Archive WITH (NOLOCK)
                        ON ArchiveID = ID
                    WHERE BoxID = ' + CONVERT(VARCHAR(40), @BoxID) + '
                    AND GroupID = ' + CONVERT(VARCHAR(40), @GroupID) + ') p
                UNPIVOT
                   (Value FOR MetricName IN 
                      (' + @cols + ')
                )AS unpvt
                INNER JOIN Metric WITH (NOLOCK)
                    ON MetricName  = Name
                ORDER BY MetricID, MetricDate'
    
    EXECUTE( @SQL )
    

提交回复
热议问题