DECLARE @dat TABLE (
id int,
name varchar(50),
string varchar(50),
number int
)
DECLARE @dat2 TABLE (
id int,
name_col varchar(50),
val varchar(50)
)
INSERT INTO @dat (id, name, string, number) VALUES (1,'Name', 'A', -1)
INSERT INTO @dat (id, name, string, number) VALUES (1,'Age', '', 30)
INSERT INTO @dat (id, name, string, number) VALUES (1,'Sex', 'Male', -1)
INSERT INTO @dat (id, name, string, number) VALUES (2,'Name', 'A', -1)
INSERT INTO @dat (id, name, string, number) VALUES (2,'Age', '', 20)
INSERT INTO @dat (id, name, string, number) VALUES (2,'Sex', 'Female', -1)
INSERT INTO @dat2
SELECT [id], [name], [val] = CASE WHEN number = -1 THEN string ELSE
CONVERT(varchar,number) END FROM @dat
SELECT * FROM @dat2
PIVOT
(
MAX(val)
FOR [name_col] IN ([Name],[Age],[Sex])
)
AS p
Вы получите то, что ожидали:
1 A 30 Male
2 A 20 Female