![](/img/trans.png)
[英]SQL Server : how to select the rows in a table with the same value on a column but some exact values on another column for the grouped rows
[英]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;
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.