Hi @Julie Miller ,
A minimal reproducible example is not provided. So, I am shooting from the hip.
Please try the following solution.
It is based on JSON. It will work starting from SQL Server 2016 onwards.
SQL
-- DDL and sample data population, start
DECLARE @list TABLE (ID VARCHAR (50), Descr VARCHAR (100), ItemCode VARCHAR (4000), RetDesc VARCHAR (4000));
INSERT INTO @List
(ID, Descr, ItemCode, RetDesc ) VALUES
('AccountTypes', 'CUSTOMER ACCOUNT TYPES', 'L^A', 'LOANS^ARREARS'),
('ActionType', 'ACTION TYPE', 'E^A^U^D^T^R', 'ENQUIRE^AMEND^AUTHORIZED^DELETED^TERMINATED^ARCHIVE RECALLED');
-- DDL and sample data population, end
SELECT *
FROM @List;
DECLARE @separator CHAR(1) = '^';
;WITH rs AS
(
SELECT ID, Descr
, s = '["' + REPLACE(ItemCode, @separator, '","') + '"]'
, s1 = '["' + REPLACE(RetDesc, @separator, '","') + '"]'
FROM @list
)
SELECT ID, Descr, ItemCode.[value] AS ItemCode, RetDesc.[value] AS RetDesc
FROM rs
CROSS APPLY OPENJSON (s, N'$') AS ItemCode
CROSS APPLY OPENJSON (s1, N'$') AS RetDesc
WHERE ItemCode.[key] = RetDesc.[key];
Output
+--------------+------------------------+----------+-----------------+
| ID | Descr | ItemCode | RetDesc |
+--------------+------------------------+----------+-----------------+
| AccountTypes | CUSTOMER ACCOUNT TYPES | L | LOANS |
| AccountTypes | CUSTOMER ACCOUNT TYPES | A | ARREARS |
| ActionType | ACTION TYPE | E | ENQUIRE |
| ActionType | ACTION TYPE | A | AMEND |
| ActionType | ACTION TYPE | U | AUTHORIZED |
| ActionType | ACTION TYPE | D | DELETED |
| ActionType | ACTION TYPE | T | TERMINATED |
| ActionType | ACTION TYPE | R | ARCHIVE RECALLED |
+--------------+------------------------+----------+-----------------+