簡體   English   中英

SQL Server查詢側重於“透視”包含非數字數據的表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM