[英]Combining multiple rows for each unique ID as a single row with multiple indexed column names in a view in SQL Server
在 MS SQL Server 2016 中,我有一個視圖vw_PERSON_COMPANY_CONTACT_INFO
,其中包含以下列:
,[COMPANY_ID]
,[PERSON_ID]
,[PERSON_NAME]
,[TITLE]
,[ADDRESS_ID]
,[ADDRESS_LINE_1]
,[ADDRESS_LINE_2]
,[ADDRESS_LINE_3]
,[CITY]
,[PROVINCE_STATE]
,[COUNTRY]
,[POSTAL_CODE]
,[EMAIL_ID]
,[EMAIL_ADDRESS]
,[PHONE_ID]
,[PHONE_NUMBER]
,[EXT]
每行代表個別員工的個人和聯系信息。 有些公司只能有一個員工,其他的則有幾十個。
我希望能夠創建另一個視圖vw_COMPANY_CONTACTS
,將所有人員/聯系信息(除COMPANY_ID
之外的所有內容,該行中的所有條目共享)組合為每個唯一COMPANY_ID
的單行,用於找到的前 7 名員工。 每個列名將潛在地被重命名並通過用1開始作為一個例子的索引遞增,我會ADDRESS_LINE_1
作為[Address1a]
為第一個雇員,如[Address2a]
用於第二,由於[Address3a]
對於第三等.
創建這種視圖的最有效方法是什么?
您可以使用rown_number()
和條件聚合。
邏輯是這樣的:
create view vw_COMPANY_CONTACTS as
select
company_id,
max(case when rn = 1 then person_id end) person_id_1,
max(case when rn = 1 then title end) title_1,
-- other columns for the contact n°1 go here
max(case when rn = 2 then person_id end) person_id_2,
max(case when rn = 2 then title end) title_2,
-- other columns for the contact n°2 go here
from (
select t.*, row_number() over(partition by company_id order by person_id) rn
from vw_PERSON_COMPANY_CONTACT_INFO t
) t
group by company_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.