Sql 如何在行上的on列中显示客户端的所有三个不同数字(工作、家庭、单元格)?
我有非常独特的要求显示电话号码从3个不同的列到一列 我从我的sql查询中得到以下结果,该查询为我提供了系统中当前所有活动客户端的联系号码 我想把所有不同的电话列转换成一列 请帮忙 这是我的查询,我从中得到以上结果Sql 如何在行上的on列中显示客户端的所有三个不同数字(工作、家庭、单元格)?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有非常独特的要求显示电话号码从3个不同的列到一列 我从我的sql查询中得到以下结果,该查询为我提供了系统中当前所有活动客户端的联系号码 我想把所有不同的电话列转换成一列 请帮忙 这是我的查询,我从中得到以上结果 select c.CLIENT_ID as "Client No", c.[HOME_PHONE] as "Home Phone", c.[WORK_PHONE] as "Work Phone", c.[WORKEXT] as "Work
select
c.CLIENT_ID as "Client No",
c.[HOME_PHONE] as "Home Phone",
c.[WORK_PHONE] as "Work Phone",
c.[WORKEXT] as "Work Ext",
c.[CCELL] as "Cell Phone",
'' as Assignment_ID,
'Office-Paris’ as "Office",
'1F65781E-78F6' as Owner
FROM CLIENTS c
left join (
select row_number() over (
partition by CLIENT_ID
order by startdate desc) as rn
, CLIENT_ID
, STATUS
,STOPDATE
, DEPT_ID
from CLTSTATES
where STARTDATE <= '2016-09-08'and DEPT_ID='R0000000001'
) h
on c.CLIENT_ID = h.CLIENT_ID
and h.rn = 1 -- Only last row
where h.STATUS = 'A'
order by c.CLIENT_ID
我没有数据,可以测试一下吗-
select
[Client No],
[Phone],
[Assignment_ID],
[Office],
[Owner]
from (
select
c.[CLIENT_ID] as "Client No",
c.[HOME_PHONE] as "Home Phone",
c.[WORK_PHONE] as "Work Phone",
c.[WORKEXT] as "Work Ext",
c.[CCELL] as "Cell Phone",
'' as Assignment_ID,
'Office-Paris' as "Office",
'1F65781E-78F6' as Owner
FROM CLIENTS c
left join (
select row_number() over (
partition by CLIENT_ID
order by startdate desc) as rn
, CLIENT_ID
, STATUS
,STOPDATE
, DEPT_ID
from CLTSTATES
where STARTDATE <= '2016-09-08'and DEPT_ID='R0000000001'
) h
on c.CLIENT_ID = h.CLIENT_ID
and h.rn = 1 -- Only last row
where h.STATUS = 'A'
) x
unpivot
( Phone for different_location in ([Home Phone], [Work Phone], [Work Ext], [Cell Phone])
) u
order by CLIENT_ID
我没有数据,可以测试一下吗-
select
[Client No],
[Phone],
[Assignment_ID],
[Office],
[Owner]
from (
select
c.[CLIENT_ID] as "Client No",
c.[HOME_PHONE] as "Home Phone",
c.[WORK_PHONE] as "Work Phone",
c.[WORKEXT] as "Work Ext",
c.[CCELL] as "Cell Phone",
'' as Assignment_ID,
'Office-Paris' as "Office",
'1F65781E-78F6' as Owner
FROM CLIENTS c
left join (
select row_number() over (
partition by CLIENT_ID
order by startdate desc) as rn
, CLIENT_ID
, STATUS
,STOPDATE
, DEPT_ID
from CLTSTATES
where STARTDATE <= '2016-09-08'and DEPT_ID='R0000000001'
) h
on c.CLIENT_ID = h.CLIENT_ID
and h.rn = 1 -- Only last row
where h.STATUS = 'A'
) x
unpivot
( Phone for different_location in ([Home Phone], [Work Phone], [Work Ext], [Cell Phone])
) u
order by CLIENT_ID
我问了同样的问题,但谁需要这个结果并不在乎哪个电话号码是哪个。他们只需要在同一个客户前面三行三个电话号码,对不起,还有分机。请使用unpivot获得想要的结果。嗯,谢谢,我可以在简单的表/查询中使用unpivot。既然我的查询已经有点复杂了,那么如何在上面进行Unpivot呢?请使用guid。不管源查询有多复杂,只要将所有代码放在unpivott中的源表中,谢谢你们的快速回复@我认为你是对的,但问题是我已经有了8个不同的问题,像上面一样,涵盖了所有可能的选择不同的办公室,不同的,服务等等,这些都是为了迁移,所以可能创建表或视图,然后在上面执行unpivot太耗时了。我问了同样的问题,但谁需要这个结果并不关心哪个电话号码是哪个。他们只需要在同一个客户前面三行三个电话号码,对不起,还有分机。请使用unpivot获得想要的结果。嗯,谢谢,我可以在简单的表/查询中使用unpivot。既然我的查询已经有点复杂了,那么如何在上面进行Unpivot呢?请使用guid。不管源查询有多复杂,只要将所有代码放在unpivott中的源表中,谢谢你们的快速回复@我认为你是对的,但问题是我已经有了8个不同的查询,如上面所述,以涵盖所有可能的选项不同的办公室,不同的服务等。这些都是为了迁移,所以创建表或视图,然后再在上面执行unpivot,可能太耗时了。