【问题标题】:Join 3 tables using a lookup table, displaying the results in colmns使用查找表连接 3 个表,在列中显示结果
【发布时间】:2014-08-04 22:18:07
【问题描述】:

这可能很明显,我只是没看到。

SQL fiddle 上的示例数据

我有 3 个表 Expertise、Contacts 和 Lookup。

查找表将专业知识连接到相关联系人(1 个专业知识连接到多个联系人)

目前联系人数据是按行排列的,我需要将其转换为列(每个专业最多 5 个联系人)。

想要使用 PIVOT,因为我正在尝试了解它的工作原理。当然可能不是这个问题的最佳解决方案,欢迎提出其他建议。

我正在寻找的结果是这样的:

ExpertiseName |Name1 |Email1 |Name2 |Email2 etc... Computer Graphics|Karl Henderson|karl@email.com |Kevin Foster|kevin@... Robotics |Viginia Lee |virginia@email.com|Ruby Riviera|...

感谢您的帮助。

【问题讨论】:

    标签: tsql pivot rows transpose


    【解决方案1】:

    您正在尝试旋转多个列(姓名和电子邮件),这并不像只旋转一个字段那么简​​单。获得所需结果的更简单方法是执行以下操作:

    select ExpertiseName,  
        MAX(case when seq = 1 then ContactName end) Name1, 
        MAX(case when seq = 1 then ContactEmail end) Email1, 
        MAX(case when seq = 2 then ContactName end) Name2,
        MAX(case when seq = 2 then ContactEmail end) Email2,  
        MAX(case when seq = 3 then ContactName end) Name3, 
        MAX(case when seq = 3 then ContactEmail end) Email3,  
        MAX(case when seq = 4 then ContactName end) Name4, 
        MAX(case when seq = 4 then ContactEmail end) Email4,  
        MAX(case when seq = 5 then ContactName end) Name5,
        MAX(case when seq = 5 then ContactEmail end) Email5  
    from
    (
        select ex.ExpertiseId,
              ex.ExpertiseName, ContactName, ContactEmail,
            ROW_NUMBER() over(PARTITION by ex.ExpertiseId order by ex.ExpertiseId) seq 
        from lookup lk
            join Expertise ex on ex.ExpertiseId = lk.ExpertiseId 
            join Contacts ct on ct.ContactId = lk.ContactId
    ) SourceTable
    group by ExpertiseName
    

    SQL Fiddle

    【讨论】:

      猜你喜欢
      • 2017-10-05
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 2020-03-28
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      相关资源
      最近更新 更多