簡體   English   中英

在 SQL Server 的視圖中將每個唯一 ID 的多行合並為一個具有多個索引列名稱的單行

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

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