简体   繁体   English

我可以为此使用Pivot吗?

[英]Can i use Pivot for this?

I have a table with the data below. 我有一张下面的数据表。

ID   | NAME | DPT | Country | School  | Course
-------------------------------------------------------------------
8888 | John | ABC | Japan   | ABC Uni | English
8888 | John | ABC | Japan   | ABC Uni | Engineering
8888 | John | ABC | England | EFG Uni | IS
8888 | John | XYZ | Japan   | ABC Uni | English
8888 | John | XYZ | Japan   | ABC Uni | Engineering
8888 | John | XYZ | England | EFG Uni | IS

I wan the table to be like this. 我要把桌子摆成这样。

ID   | NAME | DPT | Country1 | School1 | Course1 | Country2 | School2 | Course2     | Country3 | School3 | Course3
--------------------------------------------------------------------------------------------------------------------
8888 | John | ABC | Japan    | ABC Uni | English | Japan    | ABC Uni | Engineering | England  | EFG Uni | IS
8888 | John | XYZ | England  | ABC Uni | English | Japan    | ABC Uni | Engineering | England  | EFG Uni | IS

It should be sorted by the DPT, and the Country, School and Course should be seperated into Country1, Country2 etc as shown above. 如上所示,应按DPT进行排序,并将“国家/地区”,“学校”和“课程”分别分为“国家1”,“国家2”等。 How can i achieve this? 我怎样才能做到这一点? Please kindly advice. 请指教。 Thanks. 谢谢。

CREATE TABLE #temp(
    [Id] [varchar](200) NULL,
    [Name] [varchar](200) NULL,
    [Department] [varchar](200) NULL,
    [UD_Country] [varchar](50) NULL,
    [UD_School] [varchar](50) NULL,
    [UD_Course] [varchar](50) NULL
) ON [PRIMARY]


INSERT INTO #temp VALUES 
('8888','John', 'ABC','Japan', 'ABC University', 'English'),
('8888','John', 'ABC','Japan', 'ABC University', 'Engineering'),
('8888','John', 'ABC','England', 'EFG University', 'IS'),
('8888','John', 'XYZ','Japan', 'ABC University', 'English'),
('8888','John', 'XYZ','Japan', 'ABC University', 'Engineering'),
('8888','John', 'XYZ','England', 'EFG University', 'IS')
WITH TempWithCountrySeqeunce AS (
    SELECT Id
         , Name
         , Department
         , UD_Country
         , ROW_NUMBER() OVER (PARTITION BY Id, Name, Department ORDER BY Id) AS CountrySequence 
         , UD_School
         , UD_Course
    FROM #temp
)
SELECT Id
      ,Name
      ,Department
      ,MAX(CASE WHEN CountrySequence = 1 THEN UD_Country END) AS Country1
      ,MAX(CASE WHEN CountrySequence = 1 THEN UD_School END) AS School1
      ,MAX(CASE WHEN CountrySequence = 1 THEN UD_Course END) AS Course1
      ,MAX(CASE WHEN CountrySequence = 2 THEN UD_Country END) AS Country2
      ,MAX(CASE WHEN CountrySequence = 2 THEN UD_School END) AS School2
      ,MAX(CASE WHEN CountrySequence = 2 THEN UD_Course END) AS Course2
FROM TempWithCountrySeqeunce  
GROUP BY Id
        ,Name
        ,Department

Add more columns as needed 根据需要添加更多列

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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