Не упускаете ли вы какой-то критерий группировки?Как вы определяете, что A
принадлежит 123
, а не CDE
?И почему randString
в первой строке, а не во второй?
Это легко с таким ключом группировки:
DECLARE @tbl TABLE(GroupingKey INT, ListNum VARCHAR(100),[Value] VARCHAR(100));
INSERT INTO @tbl VALUES
(1,'List1','A')
,(1,'List3','123')
,(2,'List3','CDE')
,(2,'List1','Somestring')
,(1,'List2','randString');
SELECT p.*
FROM @tbl
PIVOT
(
MAX([Value]) FOR ListNum IN(List1,List2,List3)
) p;
Но с вашими данными это кажется довольно случайным...
ОБНОВЛЕНИЕ: случайный подход ...
При следующем подходе значения будут отсортированы по столбцам довольно случайным образом:
DECLARE @tbl TABLE(ListNum VARCHAR(100),[Value] VARCHAR(100));
INSERT INTO @tbl VALUES
('List1','A')
,('List3','123')
,('List3','CDE')
,('List1','Somestring')
,('List2','randString');
- будет использоваться тринезависимые, но пронумерованные наборы и присоединение к ним:
WITH All1 AS (SELECT [Value],ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RandomNumber FROM @tbl WHERE ListNum='List1')
,All2 AS (SELECT [Value],ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RandomNumber FROM @tbl WHERE ListNum='List2')
,All3 AS (SELECT [Value],ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RandomNumber FROM @tbl WHERE ListNum='List3')
SELECT All1.[Value] AS List1
,All2.[Value] AS List2
,All3.[Value] AS List3
FROM All1
FULL OUTER JOIN All2 ON All1.RandomNumber=All2.RandomNumber
FULL OUTER JOIN All3 ON All1.RandomNumber=All3.RandomNumber ;
Подсказка: в вашей таблице нет неявного порядка сортировки!
Из вашего комментария:
Этопросто номер индекса / экземпляра.randString - первая ненулевая строка.
Без определенного ORDER BY
тот же SELECT
может вернуть ваши данные в любом случайном порядке.Таким образом, нет первой ненулевой строки , по крайней мере, не в значении сначала предшествует второй ...