Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数行具有完全相同的值,但只有一列返回不同的值;如何获取此值并为此创建另一列?_Sql_Sql Server_Tsql - Fatal编程技术网

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

Sql 数行具有完全相同的值,但只有一列返回不同的值;如何获取此值并为此创建另一列?,sql,sql-server,tsql,Sql,Sql Server,Tsql,这里是:我连接了几个表,得到如下结果: ContactID Name Title Phone 1234567 John Manager 999999 1234567 John Manager 888888 我想在结果中获得唯一的ContactID,并将另一个电话值输入“Phone2”。(有2个以上,电话3,电话4) 所以我想看到的结果是这样的 ContactID Name Title Phone

这里是:我连接了几个表,得到如下结果:

ContactID    Name    Title      Phone
1234567      John    Manager    999999
1234567      John    Manager    888888
我想在结果中获得唯一的ContactID,并将另一个电话值输入“Phone2”。(有2个以上,电话3,电话4)

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

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

有什么帮助吗?我尝试使用Pivot,但似乎聚合函数在这种情况下不起作用

您仍然可以使用PIVOT,尽管您必须组成PIVOT列,我使用下面的ROW_NUMBER()函数。我在下面考虑了4个电话号码,只需扩展模式即可,例如,如果您需要满足更多需求,则有2个位置具有
[4]

下面我展示了来自名为“data”的示例表的数据。如果您有一个复杂的查询,您可以使用一个公共表表达式来命名它,即

;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;
查询1

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);
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) |

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);
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 最后一部电话 约翰经理888888999999111111
格式编辑请参见

@chue-Thx。欢迎使用。正如您可能已经注意到的,我所做的只是在每行的开头添加4个空格,以使您的数据更易于阅读。你也可以用密码来做。你只需要4个电话号码吗?或者可以有超过4个?实际上它超过4个,它变成了10..我需要添加更多的列,以便获得唯一的ContactIDThx,以获得您的帮助Richard!这很有效。但事实上,我连接了几个表(内部连接表1、表2、表3和表4)以获得这些结果…(列继续),我应该将pivot语句放在哪里?在内部连接之前还是之后?我还有一个集体条款……谢谢……谢谢你的帮助理查德。谢谢斯科特。这绝对有用。但实际上我想在结果中添加其他列。干杯