私は3つの異なる列から1つの列に電話番号を表示する非常にユニークな要件があります
私は私のSQLクエリから結果を次のように取得しています。私は現在、システム内のすべてのアクティブなクライアントの連絡先番号を取得しています。
私は電話のすべての異なる列を1つの列に変換したいと思います。
助けてください。
私が上の結果を得ている私の質問がここにあります
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
回答:
回答№1は2私はデータを持っていないので、この作品は、テストしてください -
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
回答№2の場合は1
Select ClientNo, phone = HomePhone, AssignmentId, Office, Guid From Blah Blah
union all
Select ClientNo, phone = WorkPhone, AssignmentId, Office, Guid From Blah Blah
union all
Select ClientNo, phone = CellPhone, AssignmentId, Office, Guid From Blah Blah
-- Etc.