枢轴 SQL 服务器 2005

Pivot SQL Server 2005

我的桌子:

查询:

SELECT
    Sno,
    TopEmpName,
    TopEmpID,
    HighLevel,
    CH, ED, DIR, GM, AGM, BDM, SMM,
    LowEmpID
FROM 
    (SELECT
         projectallocation.proAllocationID AS Sno,
         temp.intro_name AS TopEmpName,
         projectallocation.introtoplevelEmpid AS TopEmpID,
         temper.csshortname AS HighLevel,
         (companystructure.csshortname) AS Level,
         introducermaster.intro_name AS LowEmpName,
         projectallocation.introlevelEmpid AS LowEmpID
     FROM 
         projectallocation
     INNER JOIN 
         dbo.IntroducerMaster ON dbo.introducermaster.empid = projectallocation.introLevelEmpid
     INNER JOIN 
         introducermaster AS temp ON temp.empiD = projectallocation.introtopLevelEmpid
     INNER JOIN 
         companyStructure ON companyStructure.HLevel = projectallocation.introleveID
     INNER JOIN 
         companyStructure AS temper ON temper.Hlevel = projectallocation.introtoplevelID
     WHERE 
         projectallocation.projectID != 3
     GROUP BY 
         IntroducerMaster.Intro_Name, temp.intro_name,
         companyStructure.CSShortName,
         projectallocation.proAllocationID,
         projectallocation.introlevelEmpid,
         projectallocation.introtoplevelEmpid,
         temper.csshortname) b 
PIVOT 
    (MAX(LowEmpName) 
        FOR level IN (CH, ED, DIR, GM, AGM, BDM, SMM)) PVT
ORDER BY 
    SMM, BDM, AGM, GM, DIR, ED, CH

输出:

Sno  TopEmpName TopEmpid HighLevel  CH ED DIR GM AGM BDM  SMM LowEmpid
----------------------------------------------------------------------
1    karthi     emp01      CH    null ajju null  null null null null
1    karthi     emp01      cH    null null ramesh null null  null null

我想要这个结果:

CH      ED     DIR      GM     AGM   BDM  SMM
----------------------------------
karthi ajju,.. Ramesh,.. Some Data.........

请帮助实现这个期望的输出

您的数据库似乎区分大小写。将 csshortname 列转换为 UPPERLOWER(以及任何其他大小写不同的列)

SELECT
    Sno,
    TopEmpName,
    TopEmpID,
    HighLevel,
    CH, ED, DIR, GM, AGM, BDM, SMM,
    LowEmpID
FROM 
    (SELECT
         projectallocation.proAllocationID AS Sno,
         temp.intro_name AS TopEmpName,
         projectallocation.introtoplevelEmpid AS TopEmpID,
         UPPER( temper.csshortname ) AS HighLevel,
         (companystructure.csshortname) AS Level,
         introducermaster.intro_name AS LowEmpName,
         projectallocation.introlevelEmpid AS LowEmpID
     FROM 
         projectallocation
     INNER JOIN 
         dbo.IntroducerMaster ON dbo.introducermaster.empid = projectallocation.introLevelEmpid
     INNER JOIN 
         introducermaster AS temp ON temp.empiD = projectallocation.introtopLevelEmpid
     INNER JOIN 
         companyStructure ON companyStructure.HLevel = projectallocation.introleveID
     INNER JOIN 
         companyStructure AS temper ON temper.Hlevel = projectallocation.introtoplevelID
     WHERE 
         projectallocation.projectID != 3
     GROUP BY 
         IntroducerMaster.Intro_Name, temp.intro_name,
         companyStructure.CSShortName,
         projectallocation.proAllocationID,
         projectallocation.introlevelEmpid,
         projectallocation.introtoplevelEmpid,
         temper.csshortname) b 
PIVOT 
    (MAX(LowEmpName) 
        FOR level IN (CH, ED, DIR, GM, AGM, BDM, SMM)) PVT
ORDER BY 
    SMM, BDM, AGM, GM, DIR, ED, CH