[英]SQL Server query focusing on “pivoting” a table containing Non-numeric data
表名稱:職業
**Name Occupation**
Samantha Doctor
Julia Actor
Maria Actor
Meera Singer
Ashely Professor
Ketty Professor
Christeen Professor
Jane Actor
Jenny Doctor
Priya Singer
目標是編寫一個查詢,該查詢將“透視”上述表數據,以便顯示以下結果:
Jenny Ashley Meera Jane
Samantha Christeen Priya Julia
NULL Ketty NULL Maria
我寫了以下查詢:
WITH pivot_data AS
(
SELECT Occupation as Occupation1, -- Grouping Column
Occupation, -- Spreading Column
Name -- Aggregate Column
FROM Occupations
)
SELECT [Doctor], [Professor], [Singer], [Actor]
FROM pivot_data
PIVOT (max(Name)
FOR Occupation IN ([Doctor], [Professor], [Singer], [Actor])
) AS p;
不幸的是,上述查詢給出了以下錯誤結果:
Doctor Professor Singer Actor
NULL NULL NULL Maria
Samantha NULL NULL NULL
NULL Ketty NULL NULL
NULL NULL Priya NULL
有人可以發布將顯示所需結果的sql查詢嗎?(此外,如果您可以使用sql server“ pivot”命令執行一個查詢,而使用sql server“ pivot”命令執行另一個查詢,這將非常有幫助)
我不會為此使用數據透視。 條件聚合更容易編寫和理解。 它的性能幾乎總是略勝一籌。
首先,我必須將這些數據轉換為可消耗的東西。 這是您將來應該發布此類信息的方式。
declare @Something table
(
Name varchar(20)
, Occupation varchar(20)
)
insert @Something values
('Samantha', 'Doctor')
, ('Julia', 'Actor')
, ('Maria', 'Actor')
, ('Meera', 'Singer')
, ('Ashely', 'Professor')
, ('Ketty', 'Professor')
, ('Christeen', 'Professor')
, ('Jane', 'Actor')
, ('Jenny', 'Doctor')
, ('Priya', 'Singer')
;
現在,我們可以使用這些數據輕松地生成您的輸出。
with NumberedRows as
(
select *
, RowNum = ROW_NUMBER() over(partition by Occupation order by name)
from @Something
)
select Doctor = max(case when nr.Occupation = 'Doctor' then nr.Name end)
, Professor = max(case when nr.Occupation = 'Professor' then nr.Name end)
, Singer = max(case when nr.Occupation = 'Singer' then nr.Name end)
, Actor = max(case when nr.Occupation = 'Actor' then nr.Name end)
from NumberedRows nr
group by nr.RowNum
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.