我有一個屬性的佔有者列表,需要操縱數據,因此它顯示屬性爲一行,每個額外的居民出現在一個新的列。SQL,使用等級來生成列
這裏是我已經設法到目前爲止做:
Postcode | Number | Occupant | Rank
AA001AA | 12 | D | 1
AA001AA | 12 | E | 2
AA001AA | 12 | K | 3
AA001AA | 12 | M | 4
AA001AA | 12 | T | 5
BB001BB | 8 | M | 1
BB001BB | 8 | R | 2
等
然後我試着:
with RANKING AS
( Select
Postcode
, Number
, Occupant
, RANK() OVER
(Partition by Postcode order by Occupant) as [Rank]
from Reporting.dbo.Test --order by [Rank] desc
)
中排名查詢如下表輸出使用排名的值創建列,如下所示:
Select distinct
i.Postcode
, i.Number
, case when i.[rank] = 1 then i.Occupant end as [First Tennant]
, case when i.[rank] = 2 then i.Occupant end as [Second Tennant]
, case when i.[rank] = 3 then i.Occupant end as [Third Tennant]
, case when i.[rank] = 4 then i.Occupant end as [Fourth Tennant]
, case when i.[rank] = 5 then i.Occupant end as [Fifth Tennant]
from Reporting.dbo.Test u
inner join RANKING i on i.Postcode = u.Postcode
0123現在
,2個問題:
1)有沒有什麼辦法,以便爲x的排名,我們有X租戶行自動執行此過程
2)輸出的表是
Postcode | Number | First Tennant | Second Tennant | Third Tennant | Fourth Tennant | Fifth Tennant |
AA001AA | 12 | D | NULL | NULL | NULL | NULL |
AA001AA | 12 | NULL | E | NULL | NULL | NULL |
等等。
如何壓縮此列表,以便每個郵政編碼只有一行,並且所有非空值都出現在該行上。
你需要實際的單詞「第一」,「第二」等?或者只有在那裏有號碼就足夠了?它不會從根本上改變答案,但如果您需要這些答案,則可能需要額外的映射表來將數字映射到其字符串表示形式。 – Xedni
您可以使用動態數據透視將其自動化。列數將等於給定郵編/號碼所需的最大值。對於不包含這些租戶的所有行,將顯示NULL。 – scsimon
任何區分它的方法都行得通,如果有一種方法,例如Tennant(等級值),那很好。 – MichaelL