I have data like this
DECLARE @Employee TABLE
(EmployeeName NVARCHAR(50),
EmployeeAddress NVARCHAR(50),
WorkedLocations NVARCHAR(50),
IdNumbers NVARCHAR(50),
UpdatedOn Date
)
Insert into @Employee
Values ('Alex',' Alex address','Cisco','12345',GETDATE()),
('John','John Address','Microsoft','23456',GETDATE()),
('Bob','Bob Address','CiscoMicrosoft','78903,89067',GETDATE()),
('Bill','Bill Address','Microsoft','54652',GETDATE())
select * from @Employee
In 3rd row based on the 3rd column value a row has to be created and 4th row value should be split and assigned to respective 3rd column. Please see below required output
DECLARE @Employee TABLE (
EmployeeName NVARCHAR(50)
, EmployeeAddress NVARCHAR(50)
, WorkedLocations NVARCHAR(50)
, IdNumbers NVARCHAR(50)
,UpdatedOn Date)
Insert into @Employee
Values ('Alex',' Alex address','Cisco','12345',GETDATE()),
('John','John Address','Microsoft','23456',GETDATE()),
('Bob','Bob Address','Cisco','78903',GETDATE()),
('Bob','Bob Address','Microsoft','89067',GETDATE()),
('Bill','Bill Address','Microsoft','54652',GETDATE())
select * from @Employee
Thanks in advance!
This will at least split your Multi-ID-column and deliver an output close to the needed. For splitting the company's names you must give more information.
EDIT: As you statet, there is only Cisco, Microsoft and CiscoMicrosoft. So - in this special case, this should work:
DECLARE @Employee TABLE
(EmployeeName NVARCHAR(50),
EmployeeAddress NVARCHAR(50),
WorkedLocations NVARCHAR(50),
IdNumbers NVARCHAR(50),
UpdatedOn Date
)
Insert into @Employee
Values ('Alex',' Alex address','Cisco','12345',GETDATE()),
('John','John Address','Microsoft','23456',GETDATE()),
('Bob','Bob Address','CiscoMicrosoft','78903,89067',GETDATE()),
('Bill','Bill Address','Microsoft','54652',GETDATE());
SELECT *
,CASE WHEN IsMulti=0 THEN WorkedLocations ELSE CASE WHEN inx = 1 THEN 'Cisco' ELSE 'Microsoft' END END AS WorkedLocationResolved
FROM
(
SELECT ROW_NUMBER() OVER(PARTITION BY EmployeeAddress ORDER BY UpdatedOn) AS inx,*
FROM
(
SELECT EmployeeName
,EmployeeAddress
,WorkedLocations
,x.y.value('.','int') AS IdNumber
,UpdatedOn
,CASE WHEN CHARINDEX(',',IdNumbers,1)>0 THEN 1 ELSE 0 END AS IsMulti
FROM @Employee AS empl
CROSS APPLY(SELECT CASE WHEN WorkedLocations='CiscoMicrosoft' THEN 'Cisco,Microsoft' ELSE WorkedLocations END) AS wl(wl)
CROSS APPLY
(
SELECT CAST('<root><r>' + REPLACE(IdNumbers,',','</r><r>') + '</r></root>' AS XML)
) AS IDs(v)
CROSS APPLY IDs.v.nodes('/root/r') AS x(y)
) AS tbl
) AS tbl2
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.