【问题标题】:Concatenate two columns and join by ID连接两列并按 ID 连接
【发布时间】:2016-10-24 20:30:46
【问题描述】:

提前致谢!我正在寻找最有效的方法来连接每个“秘书”,其中 JobTitle = “Assistant”,然后通过“Empl_code”加入另一个表。这将在视图中完成。

declare @Atty_Sec table
(    Empl_Code int,
    Attorney varchar(20),
    Secretary varchar(50),
    SecJobTitle varchar(50)
)
insert into @Atty_Sec
select 1,'John Smith','Mary Anne', 'Assistant' union all
select 1,'John Smith', 'Joanne Rockit','Office Manager'union all
select 1,'John Smith', 'Sharon Osbourne','Assistant'union all
select 2,'Steve Jobs', 'Katherine Kay','Assistant' union all
select 2,'Steve Jobs','Rylee Robot','Office Manager' union all
select 3,'Mike Michaels','Joe Joseph','Assistant' union all
select 3,'Mike Michaels','Ronald McDonald','Office Manager'

Select * from @Atty_Sec

针对此表加入:

declare @UserTable table
(
    Empl_Code int,
    Attorney varchar(20)

)
insert into @UserTable
select 1,'John Smith' union all
select 2,'Steve Jobs'union all
select 3,'Mike Michaels'

Select * from @UserTable 

视图的输出应如下所示,其中包含两列“Empl_Code”和一列称为 [Assistants]:

  • 1 玛丽安妮;莎朗·奥斯本
  • 2 凯瑟琳凯
  • 3 乔·约瑟夫

【问题讨论】:

    标签: sql sql-server tsql join for-xml-path


    【解决方案1】:
    Select A.Empl_Code
          ,Assistants = B.Value
     From (Select Distinct Empl_Code From @Atty_Sec) A
     Cross Apply (Select Value=Stuff((Select Distinct ',' + Secretary 
                          From  @Atty_Sec 
                          Where Empl_Code=A.Empl_Code 
                            and SecJobTitle ='Assistant'
                          For XML Path ('')),1,1,'') 
    
                 ) B
    

    返回

    Empl_Code   Assistants 
    1           Mary Anne,Sharon Osbourne
    2           Katherine Kay
    3           Joe Joseph
    

    【讨论】:

      【解决方案2】:

      您可以使用 group by 和以下内容:

      select a.empl_code, stuff((select ','+ secretary from @atty_Sec where empl_Code = a.empl_Code and SecJobTitle = 'Assistant' for xml path('')),1,1,'')
        from @Atty_Sec a
      group by a.Empl_Code
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-07
        • 2019-11-13
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 2019-01-05
        • 1970-01-01
        相关资源
        最近更新 更多