单列值上的两列数据的动态Pivot - sql server

时间:2014-07-22 12:37:56

标签: sql pivot-table

create table Projectdata
(
    ProjectId INT,
    ProjectName varchar(50),
    AssociateCount INT,
    Technology varchar(150),
    ReportMonth INT,
    Reportyear INT
)

insert into Projectdata values (111, 'ABC', 2, '.NET', 1, 2014)
insert into Projectdata values (112, 'DEF', 3, '.NET', 1, 2014)
insert into Projectdata values (113, 'XYZ', 5, 'JAVA', 1, 2014)
insert into Projectdata values (111, 'ABC', 3, 'JAVA', 2, 2014)
insert into Projectdata values (112, 'DEF', 2, '.NET', 2, 2014)
insert into Projectdata values (113, 'XYZ', 5, 'JAVA', 2, 2014)
insert into Projectdata values (112, 'DEF', 1, 'JAVA', 3, 2014)
insert into Projectdata values (113, 'XYZ', 5, 'JAVA', 3, 2014)

Select * from Projectdata提供

等数据

enter image description here

我编写了动态数据透视查询,但无法以所需格式查看数据。

发布我的动态查询和输出

DECLARE @outputStatus nvarchar(max)
, @pivotlistStatus VARCHAR(MAX)
, @pivotlistScore VARCHAR(MAX)


SELECT   
    @pivotlistStatus = ISNULL(@pivotlistStatus + ',', '') + QUOTENAME(createdate1)
FROM
    (
        SELECT 
            TOP 1000 CONVERT(CHAR(3),DATENAME(MONTH, DATEADD(MONTH,ReportMonth,0) -1))+'-'+ CONVERT(VARCHAR(4),ReportYear)+'-'+'Status' as createdate1
        FROM
            (
                SELECT 
                    DISTINCT ReportMonth, 
                    ReportYear
                FROM 
                    Projectdata
                GROUP BY 
                    ReportMonth, 
                    ReportYear
            )rep
        ORDER BY
            ReportMonth, 
            ReportYear
    )as months1
SELECT   
    @pivotlistScore = ISNULL(@pivotlistScore + ',', '') + QUOTENAME(createdate1)
FROM
    (
        SELECT 
            TOP 1000 CONVERT(CHAR(3),DATENAME(MONTH, DATEADD(MONTH,ReportMonth,0) -1))+'-'+ CONVERT(VARCHAR(4),ReportYear)+'-'+'Score' as createdate1
        FROM
            (           
                SELECT 
                    DISTINCT ReportMonth, 
                    ReportYear
                FROM 
                    Projectdata
                GROUP BY 
                    ReportMonth, 
                    ReportYear
            )rep
        ORDER BY
            ReportMonth, 
            reportyear
    )as months  


SET @outputStatus = N'
SELECT 
    ProjectId,
    ProjectName,
    ' + @pivotlistStatus + '
    ,' + @pivotlistScore +'

FROM
    (SELECT 
        DISTINCT 
        ProjectId,
        ProjectName,
        CONVERT(CHAR(3),DATENAME(MONTH, DATEADD(MONTH,ReportMonth,0) -1))+''-''+ CONVERT(VARCHAR(4),ReportYear)+''-''+''Status'' AS CreatedateStatus ,
        CONVERT(CHAR(3),DATENAME(MONTH, DATEADD(MONTH,ReportMonth,0) -1))+''-''+ CONVERT(VARCHAR(4),ReportYear)+''-''+''Score'' AS CreatedateScore ,
        AssociateCount,
        Technology
    FROM    
        Projectdata 
      ) pvtunion
     PIVOT ( MAX(Technology) FOR CreatedateStatus IN (' + @pivotlistStatus + ') ) AS PVTstatus
     PIVOT ( SUM(AssociateCount) FOR CreatedateScore IN (' + @pivotlistScore + ') ) AS PVTScore

ORDER BY ProjectId'

EXEC sp_executesql @outputStatus

enter image description here

但我需要一行中的一个项目数据...我可以看到结果为8行,但我需要3行中的输出,如下enter image description here

可能会有人帮助我.......

0 个答案:

没有答案