透视查询以空值标记重复行

时间:2017-10-02 12:00:07

标签: sql sql-server pivot

我的透视查询正在生成重复的行,我被阻止了。任何人都可以解决这个问题吗?

CREATE PROCEDURE [dbo].[test2]
AS
    BEGIN

        --Declare necessary variables
        DECLARE @SQLQuery AS NVARCHAR(MAX);
        DECLARE @WeekColumns AS NVARCHAR(MAX);

--Get unique values of pivot column  
        SELECT  @WeekColumns = COALESCE(@WeekColumns + ',', '')
                + QUOTENAME(name)
        FROM    ( SELECT    name
                  FROM      ( SELECT    [id_week]
                                      , name
                                      , value
                                      , prjfamilyID
                                      , ROW_NUMBER() OVER ( PARTITION BY name 
                                                            ORDER BY [id_week] ASC ) rn
                              FROM      weekvalues
                            ) a
                  WHERE     rn = 1
                ) AS PivotExample;

        SELECT  @WeekColumns;

--Create the dynamic query with all the values for 
--pivot column at runtime
        SET @SQLQuery = N'SELECT  prjfamilyID, ' + @WeekColumns + '
    FROM [dbo].[weekvalues] 
    PIVOT( MAX(value) 
          FOR name IN (' + @WeekColumns + ')) AS P';

        SELECT  @SQLQuery;
--Execute dynamic query
        EXEC sp_executesql @SQLQuery;

    END;

以下是我得到的结果

1   NULL    NULL    1004    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
1   NULL    NULL    NULL    NULL    NULL    997     NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
1   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    992     NULL    NULL    NULL    NULL
1   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    997
2   NULL    NULL    2100    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
2   NULL    NULL    NULL    NULL    NULL    2036    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
2   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    2014    NULL    NULL    NULL    NULL
2   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    2040
3   NULL    NULL    1944    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
3   NULL    NULL    NULL    NULL    NULL    1914    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
3   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1882    NULL    NULL    NULL    NULL
3   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1880

我想要的是1号,例如我想将所有行合并为一个包含所有值的行

感谢

1 个答案:

答案 0 :(得分:0)

您可以使用此更改@SQLQuery查询,然后重试吗?

SET @SQLQuery = 
        N'SELECT * FROM (SELECT prjfamilyID, value, name
    FROM [dbo].[weekvalues] ) SRC
    PIVOT( MAX(value) 
          FOR name IN (' + @WeekColumns + ')) AS P';