Я не думаю, что ваша проблема четко определена, но вот решение:
--CREATE TABLE so1008354 (
-- Name1 VARCHAR(10)
-- ,Name2 VARCHAR(10)
-- ,Name3 VARCHAR(10)
-- ,Name4 VARCHAR(10)
--)
--
--INSERT INTO so1008354 (Name1, Name2, Name3, Name4) VALUES ( 'N1', 'N2', 'N3', 'N4' )
--INSERT INTO so1008354 (Name1, Name2, Name3, Name4) VALUES ( '1', '2', '4', '7' )
--INSERT INTO so1008354 (Name1, Name2, Name3, Name4) VALUES ( '3', '1', '8', '7' )
--INSERT INTO so1008354 (Name1, Name2, Name3, Name4) VALUES ( '4', '8', '5', '7' )
--INSERT INTO so1008354 (Name1, Name2, Name3, Name4) VALUES ( '7', '5', '3', '8' )
SELECT *
FROM so1008354
--
;
WITH unpvt
AS ( SELECT col1,
col2
FROM so1008354 UNPIVOT ( col2 FOR col1 IN ( [Name1], [Name2], [Name3], [Name4] ) ) AS unpvt
) ,
XLate
AS ( SELECT col1 AS NameList_pre,
col2 AS NameList
FROM unpvt
WHERE col2 LIKE 'N%'
) ,
Data
AS ( SELECT col1 AS NameList_pre,
col2 AS Tokens
FROM unpvt
WHERE col2 NOT LIKE 'N%'
)
SELECT XLate.NameList,
Data.Tokens
FROM Data
INNER JOIN XLate ON XLate.NameList_pre = Data.NameList_pre
ORDER BY XLate.NameList,
Data.Tokens
Что дает результаты:
Name1 Name2 Name3 Name4
---------- ---------- ---------- ----------
N1 N2 N3 N4
1 2 4 7
3 1 8 7
4 8 5 7
7 5 3 8
(5 row(s) affected)
NameList Tokens
---------- ----------
N1 1
N1 3
N1 4
N1 7
N2 1
N2 2
N2 5
N2 8
N3 3
N3 4
N3 5
N3 8
N4 7
N4 7
N4 7
N4 8
(16 row(s) affected)