简体   繁体   中英

Pivot SQL Server 2005

My tables:

  • Introducermaster
  • ProjectAllocation
  • CompanyStructure

Query:

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

Output:

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

I want this result instead:

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

Please help achieve this desired output

It seems your DB is case-sensitive. Convert csshortname column to UPPER or LOWER (and any other columns which would have different case)

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM