繁体   English   中英

几行值完全相同,但只有一列返回不同的值; 如何获取此值并为此创建另一个列?

[英]Several rows with exact same values but only one column returns different value; How to grab this value and create another column(s) for that?

因此,这里是:我加入了几个表并得到如下结果:

ContactID    Name    Title      Phone
1234567      John    Manager    999999
1234567      John    Manager    888888

我想在结果中获得唯一的ContactID,然后将另一个电话值添加到“ Phone2”。 (有超过2个,Phone3,Phone4)

所以我想看的结果是这样的

ContactID    Name   Title             Phone    Phone2     Phone3    Phone4...
1234567      John   Manager           999999    888888     NULL      NULL  

有什么帮助吗? 我尝试使用Pivot,但在这种情况下似乎无法使用聚合功能。

尽管您必须组成一个透视列,但仍可以使用PIVOT,为此,我在下面使用了ROW_NUMBER()函数。 我在下面允许使用4个电话号码,只需扩展模式即可,例如[4]有2个位置,如果您需要容纳更多的话。

在下面,我显示了来自名为“数据”的示例表的数据。 如果您有复杂的查询,则可以先使用通用表表达式将其命名,即

;with data as (
   <your entire complex query that produces the
    columns: ContactId, Name, Title, Phone>
)
select ContactID, Name, Title,
       [1] as Phone1,
       [2] as Phone2,
       [3] as Phone3,
       [4] as Phone4
  from (
    select ContactID, Name, Title, Phone,
           Row_Number() over (partition by ContactID, Name, Title
                              order by Phone) RN
      from data) p
pivot (max(Phone) for RN in ([1],[2],[3],[4])) v;

SQL小提琴

MS SQL Server 2012架构设置

create table data (
  ContactID int,
  Name varchar(10),
  Title varchar(10),
  Phone varchar(20));
insert data values
(1234561,      'Jill',    'Employee',    999991),
(1234562,      'Joel',    'Employee',    999992),
(1234567,      'John',    'Manager',    999999),
(1234567,      'John',    'Manager',    888888);

查询1

select ContactID, Name, Title,
       [1] as Phone1,
       [2] as Phone2,
       [3] as Phone3,
       [4] as Phone4
  from (
    select ContactID, Name, Title, Phone,
           Row_Number() over (partition by ContactID, Name, Title
                              order by Phone) RN
      from data) p
pivot (max(Phone) for RN in ([1],[2],[3],[4])) v;

结果

| CONTACTID | NAME |    TITLE | PHONE1 | PHONE2 | PHONE3 | PHONE4 |
-------------------------------------------------------------------
|   1234561 | Jill | Employee | 999991 | (null) | (null) | (null) |
|   1234562 | Joel | Employee | 999992 | (null) | (null) | (null) |
|   1234567 | John |  Manager | 888888 | 999999 | (null) | (null) |

如果您愿意,可以将所有电话号码集中到一栏中,这取决于您的情况可能对您更有用。

First     Last        Phone
John      Manager     888888,999999,111111

参见http://www.centrolutions.com/blog/post/2010/03/29/Selecting-Multiple-Rows-as-a-Single-Column-in-SQL.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM